本篇內(nèi)容主要講解“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”吧!
鑲黃ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
Go語音通過首字符的大小寫來限制變量、函數(shù)的包外可見性。最近遇到個(gè)問題,需要訪問一個(gè)官方包的未導(dǎo)出變量,發(fā)現(xiàn)可以通過反射獲取,于是記錄下來:
首選我們建個(gè)新的包user/user.go
package user type User struct { id int Name string } func NewUser() User { return User{2, "gojuukaze"} }
然后我們編寫main.go
,通過reflect.ValueOf
輸出user
func main(){ user:= user.NewUser() fmt.Println(user.Name) fmt.Println(reflect.ValueOf(user)) }
程序的輸出為:
gojuukaze {2 gojuukaze}
可以看到reflect.ValueOf
其實(shí)是能獲取未導(dǎo)出的變量的。
reflect.ValueOf
返回的是結(jié)構(gòu)體Value
,接下來我們查看Value
方法,可以看到一個(gè)FieldByName
函數(shù),從名字不難看出,它是通過字段名獲取字段。
接下來嘗試通過FieldByName
獲取變量。需要注意的是FieldByName
返回的是Value
類型,你可能需要經(jīng)過類型裝換后才能使用。
func main(){ user:= user.NewUser() v:=reflect.ValueOf(user) fmt.Println(v.FieldByName("id")) fmt.Println(v.FieldByName("id").Int()) }
程序輸出為:
2 2
到此,相信大家對(duì)“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!