golang結構體指針的實現(xiàn)
1、由于結構體是值類型,在方法傳遞時希望傳遞結構體地址,可以使用結構體指針完成,結合new(T)函數(shù)創(chuàng)建結構體指針
peo := new(People)
//因為結構體本質是值類型,所以創(chuàng)建結構體指針時已經(jīng)開辟了內(nèi)存空間
fmt.Println(peo == nil) //輸出:false
//由于結構體中屬性并不是指針類型,所以可以直接調(diào)用
peo.Name = "jeff"
fmt.Println(peo)//輸出:&{jeff 0}
peo1:=peo
peo1.Name="高級語言"
fmt.Println(peo1,peo)//輸出:&{高級語言 0} &{高級語言 0}
2、如果不想使用new(T)函數(shù),可以直接聲明結構體指針并賦值
//聲明結構體指針
var peo *People
//給結構體指針賦值
peo = &People{"jeff", 18}
/*
上面代碼使用短變量方式如下
peo:= &People{"jeff", 18}
*/
fmt.Println(peo)
3、結構體指針比較的是地址,*結構體指針取出地址中對應的值
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}
//結構體變量不能和指針比較,使用*指針取出地址中值
fmt.Println(p1 == *p3) //輸出:true
p4 := &People{"jeff", 17}
//指針比較的是地址
fmt.Println(p3 == p4) //輸出:false到此這篇關于golang結構體指針的實現(xiàn)的文章就介紹到這了,更多相關golang結構體指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang中的[]byte與16進制(String)之間的轉換方式
這篇文章主要介紹了Golang中的[]byte與16進制(String)之間的轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Go1.18?新特性之多模塊Multi-Module工作區(qū)模式
這篇文章主要介紹了Go1.18?新特性之多模塊Multi-Module工作區(qū)模式,在 Go 1.18之前,建議使用依賴模塊中的 replace 指令來處理這個問題,從 Go 1.18開始引入了一種同時處理多個模塊的新方法,通過案例給大家詳細介紹,感興趣的朋友一起看看吧2022-04-04
Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)
這篇文章主要介紹了Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
golang通用的grpc?http基礎開發(fā)框架使用快速入門
這篇文章主要為大家介紹了golang通用的grpc?http基礎開發(fā)框架使用快速入門詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Go語言中io.Reader和io.Writer的詳解與實現(xiàn)
在Go語言的實際編程中,幾乎所有的數(shù)據(jù)結構都圍繞接口展開,接口是Go語言中所有數(shù)據(jù)結構的核心。在使用Go語言的過程中,無論你是實現(xiàn)web應用程序,還是控制臺輸入輸出,又或者是網(wǎng)絡操作,不可避免的會遇到IO操作,使用到io.Reader和io.Writer接口。下面來詳細看看。2016-09-09

