真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言變量后面兩橫杠 go 變量定義

golang-指針類型

tips: *號,可以指向指針類型內(nèi)存地址上的值,號,可以獲取值類型的內(nèi)存地址

成都創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元合肥做網(wǎng)站,已為上家服務(wù),為合肥各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

每一個變量都有內(nèi)存地址,可以通過變量來操作內(nèi)存地址中的值,即內(nèi)存的大小

go語言中獲取變量的內(nèi)存地址方法:通過 符號可以獲取變量的地址

定義:普通變量存儲的是對應(yīng)類型的值,這些類型就叫值類型

變量b,在內(nèi)存中的地址為:0x1040a124,在這個內(nèi)存地址上存儲的值為:156

定義:指針類型的變量存儲的是?個地址,所以?叫指針類型或引?類型

b 是值類型,它指向的是內(nèi)存地址上的值

a是指針類型,它指向的是b的內(nèi)存地址

指針類型定義,語法: var 變量名 *類型

指針類型在定義完成后,默認(rèn)為空地址,即空指針(nil)

在定義好指針變量后,可以通過***** 符號可以獲取指針變量指向的變量

在這里的 *a 等價于 b,通過修改 *a ,最終修改的是值類型b的值

這里a,d是值類型,b,c是指針類型

d就相當(dāng)于把a(bǔ)內(nèi)存地址上值,在內(nèi)存中從新開辟了一塊空間存儲,d和a互不影響

b,c相當(dāng)于指向了a的內(nèi)存地址,當(dāng)使用*號引用出內(nèi)存地址上的變量上,修改值得,a的值也會跟著改變

這可能是最全的golang的"=="比較規(guī)則了吧

大家經(jīng)常用"=="來比較兩個變量是否相等。但是golang中的"=="有很多細(xì)節(jié)的地方,跟php是不一樣的。很多時候不能直接用"=="來比較,編譯器會直接報錯。

golang中基本類型的比較規(guī)則和復(fù)合類型的不一致,先介紹下golang的變量類型:

golang中的基本類型

比較的兩個變量類型必須相等。而且,golang沒有隱式類型轉(zhuǎn)換,比較的兩個變量必須類型完全一樣,類型別名也不行。如果要比較,先做類型轉(zhuǎn)換再比較。

復(fù)合類型是逐個字段,逐個元素比較的。需要注意的是, array 或者struct中每個元素必須要是可比較的,如果某個array的元素 or struct的成員不能比較(比如是后面介紹的slice,map等),則此復(fù)合類型也不能比較。

逐個成員比較類型和值。每個對應(yīng)成員的比較遵循基本類型變量的比較規(guī)則。

但是如果struct中有不可比較的成員類型時:

可以看到,struct中有slice這種不可比較的成員時,整個struct都不能做比較,即使沒有對slice那個成員賦值(slice默認(rèn)值為nil)

slice和map的比較規(guī)則比較奇怪,我們先說普通的變量引用類型val和channel的比較規(guī)則。

引用類型變量存儲的是某個變量的內(nèi)存地址。所以引用類型變量的比較,判斷的是這兩個引用類型存儲的是不是同一個變量。

上面看起來比較廢話,但是得理解引用類型的含義。不然對判斷規(guī)則還是不清楚。

slice類型不可比較,只能與零值nil做比較。

關(guān)于slice類型不可比較的原因,后面會專門寫文章做討論。

map類型和slice一樣,不能比較,只能與nil做比較。

接口類型的變量,包含該接口變量存儲的值和值的類型兩部分組成,分別稱為接口的動態(tài)類型和動態(tài)值。 只有動態(tài)類型和動態(tài)值都相同時,兩個接口變量才相同:

而且接口的動態(tài)類型必須要是可比較的,如果不能比較(比如slice,map),則運(yùn)行時會報panic。因為編譯器在編譯時無法獲取接口的動態(tài)類型,所以編譯能通過,但是運(yùn)行時直接panic:

golang的func作為一等公民,也是一種類型,而且不可比較

上面說過,map和slice是不可比較類型,但是有沒有特殊的方法來對slice和map做比較呢,有

reflect.DeepEqual函數(shù)可以用來比較兩個任意類型的變量

對map類型做比較:

對slice類型做比較:

對struct類型做比較:

可以發(fā)現(xiàn),只要變量的類型和值相同的話,reflect.DeepEqual比較的結(jié)果就為true

直接看用例:

結(jié)果為:

1, golang的類型再定義和類型別名

2,golang的slice和map為什么不可以比較

1,

2,

3,

Go語言基礎(chǔ)語法(一)

本文介紹一些Go語言的基礎(chǔ)語法。

先來看一個簡單的go語言代碼:

go語言的注釋方法:

代碼執(zhí)行結(jié)果:

下面來進(jìn)一步介紹go的基礎(chǔ)語法。

go語言中格式化輸出可以使用 fmt 和 log 這兩個標(biāo)準(zhǔn)庫,

常用方法:

示例代碼:

執(zhí)行結(jié)果:

更多格式化方法可以訪問中的fmt包。

log包實現(xiàn)了簡單的日志服務(wù),也提供了一些格式化輸出的方法。

執(zhí)行結(jié)果:

下面來介紹一下go的數(shù)據(jù)類型

下表列出了go語言的數(shù)據(jù)類型:

int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。

常量是在程序編譯時就確定下來的值,程序運(yùn)行時無法改變。

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

Go 語言的運(yùn)算符主要包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符以及指針相關(guān)運(yùn)算符。

算術(shù)運(yùn)算符:

關(guān)系運(yùn)算符:

邏輯運(yùn)算符:

位運(yùn)算符:

賦值運(yùn)算符:

指針相關(guān)運(yùn)算符:

下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。

if語法格式如下:

if ... else :

else if:

示例代碼:

語法格式:

另外,添加 fallthrough 會強(qiáng)制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。

示例代碼:

執(zhí)行結(jié)果:

下面介紹幾種循環(huán)語句:

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

也可以通過標(biāo)記退出循環(huán):

--THE END--


網(wǎng)頁名稱:go語言變量后面兩橫杠 go 變量定義
URL網(wǎng)址:http://weahome.cn/article/dddjjsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部