golang結(jié)構(gòu)體指針的實(shí)現(xiàn)
1、由于結(jié)構(gòu)體是值類(lèi)型
,在方法傳遞時(shí)希望傳遞結(jié)構(gòu)體地址
,可以使用結(jié)構(gòu)體指針完成,結(jié)合new(T)
函數(shù)創(chuàng)建結(jié)構(gòu)體指針
peo := new(People) //因?yàn)榻Y(jié)構(gòu)體本質(zhì)是值類(lèi)型,所以創(chuàng)建結(jié)構(gòu)體指針時(shí)已經(jīng)開(kāi)辟了內(nèi)存空間 fmt.Println(peo == nil) //輸出:false //由于結(jié)構(gòu)體中屬性并不是指針類(lèi)型,所以可以直接調(diào)用 peo.Name = "jeff" fmt.Println(peo)//輸出:&{jeff 0} peo1:=peo peo1.Name="高級(jí)語(yǔ)言" fmt.Println(peo1,peo)//輸出:&{高級(jí)語(yǔ)言 0} &{高級(jí)語(yǔ)言 0}
2、如果不想使用new(T)
函數(shù),可以直接聲明結(jié)構(gòu)體指針并賦值
//聲明結(jié)構(gòu)體指針 var peo *People //給結(jié)構(gòu)體指針賦值 peo = &People{"jeff", 18} /* 上面代碼使用短變量方式如下 peo:= &People{"jeff", 18} */ fmt.Println(peo)
3、結(jié)構(gòu)體指針比較的是地址,*結(jié)構(gòu)體指針
取出地址中對(duì)應(yīng)的值
p1 := People{"jeff", 18} p2 := People{"jeff", 18} fmt.Printf("%p %p\n", &p1, &p2) //輸出地址不同 fmt.Println(p1 == p2) //輸出:true p3 := new(People) p3 = &People{"jeff", 17} //結(jié)構(gòu)體變量不能和指針比較,使用*指針取出地址中值 fmt.Println(p1 == *p3) //輸出:true p4 := &People{"jeff", 17} //指針比較的是地址 fmt.Println(p3 == p4) //輸出:false
到此這篇關(guān)于golang結(jié)構(gòu)體指針的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang結(jié)構(gòu)體指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go 代碼格式化和風(fēng)格開(kāi)發(fā)者指南
這篇文章主要為大家介紹了go 代碼格式化和風(fēng)格開(kāi)發(fā)者指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Go語(yǔ)言實(shí)現(xiàn)自動(dòng)填寫(xiě)古詩(shī)詞實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言實(shí)現(xiàn)自動(dòng)填寫(xiě)古詩(shī)詞的相關(guān)資料,這是最近在項(xiàng)目中遇到的一個(gè)需求,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03Go程序的init函數(shù)在什么時(shí)候執(zhí)行
在Go語(yǔ)言中,init?函數(shù)是一個(gè)特殊的函數(shù),它用于執(zhí)行程序的初始化任務(wù),本文主要介紹了Go程序的init函數(shù)在什么時(shí)候執(zhí)行,感興趣的可以了解一下2023-10-10Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式
這篇文章主要介紹了Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11