值類型和引用類型

值類型:int、float、bool和string這些類型都屬于值類型,使用這些類型的變量直接指向存在內(nèi)存中的值,值類型的變量的值存儲(chǔ)在棧中。當(dāng)使用等號(hào)=將一個(gè)變量的值賦給另一個(gè)變量時(shí),如 j = i ,實(shí)際上是在內(nèi)存中將 i 的值進(jìn)行了拷貝。可以通過(guò) &i 獲取變量 i 的內(nèi)存地址。 值拷貝
引用類型:特指slice、map、channel這三種預(yù)定義類型。引用類型擁有更復(fù)雜的存儲(chǔ)結(jié)構(gòu):(1)分配內(nèi)存 (2)初始化一系列屬性等一個(gè)引用類型的變量r1存儲(chǔ)的是r1的值所在的內(nèi)存地址(數(shù)字),或內(nèi)存地址中第一個(gè)字所在的位置,這個(gè)內(nèi)存地址被稱之為指針,這個(gè)指針實(shí)際上也被存在另外的某一個(gè)字中。
兩者的主要區(qū)別:拷貝操作和函數(shù)傳參。
正文開(kāi)始重點(diǎn)給大家介紹go中的引用類型。
首先,go中的賦值,都是值傳遞
a := 1
b := ax := Struct{}
y := x
他們都是在內(nèi)存中有獨(dú)立空間的,也就是 copy 的過(guò)程,所以這里對(duì)y的某個(gè)屬性的改動(dòng),并不會(huì)影響x
那么我們要讓兩個(gè)變量指向同一個(gè)內(nèi)存怎么辦呢,可以使用引用類型:
y := &x
這時(shí)候,y的類型是 *Struct ,這時(shí)候我們可以對(duì)y進(jìn)行修改,修改完之后,x也會(huì)發(fā)現(xiàn)變化,因?yàn)閥現(xiàn)在是一個(gè)引用類型,他指向的是x結(jié)構(gòu)體所在的內(nèi)存
我們可以通過(guò):
y.variable = xxx
來(lái)直接調(diào)用引用類型的結(jié)構(gòu)體賦值,但是要注意的是,這是go的語(yǔ)法糖,他只是幫助我們簡(jiǎn)化了通過(guò)指針來(lái)獲取實(shí)際內(nèi)存的過(guò)程,完整的寫(xiě)法應(yīng)該是這樣的:
(*y).variable = xxx
*y 是對(duì)指針的反引用,可以理解為 *y == x 。
為什么設(shè)計(jì)這個(gè)語(yǔ)法糖呢,是因?yàn)樵趃o里面我們是無(wú)法直接操作指針,像c++中直接對(duì)內(nèi)存地址進(jìn)行計(jì)算進(jìn)而得到其他內(nèi)存地址的運(yùn)算,在go里面是默認(rèn)不支持的
print(y) // 得到類似0x8123這樣的內(nèi)存地址數(shù)據(jù)
// 理論上可以得到一個(gè)新的內(nèi)存地址,但是在go里默認(rèn)是不支持的
newAddr := y + 4
因?yàn)闊o(wú)法直接操作地址,所以go就提供語(yǔ)法糖,讓我們?cè)谑褂靡妙愋瓦M(jìn)行操作的時(shí)候,默認(rèn)就是對(duì)引用所指向的內(nèi)存地址進(jìn)行操作。
注意我們是可以對(duì)引用類型直接賦值的,但是賦值的類型也必須是引用類型
y = &Struct{} // 這樣是可以的,但是不能是y = Struct{}
a := 1
b := &a
b = 2 // 這是不行的,因?yàn)閎的類型是 *int
特殊的引用類型
能夠通過(guò) make() 函數(shù)創(chuàng)建的都是引用類型,比如 slice 和 map , slice 雖然看起來(lái)像數(shù)組,但是他其實(shí)是一個(gè)指向數(shù)組內(nèi)存空間的一個(gè)指針類型
type Slice struct {
point Point // 內(nèi)存地址
len int
cap int
}另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)名稱:詳解go中的引用類型-創(chuàng)新互聯(lián)
URL分享:http://www.chinadenli.net/article48/pcehp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站策劃、商城網(wǎng)站、App開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容