您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”吧!
Go語音通過首字符的大小寫來限制變量、函數(shù)的包外可見性。最近遇到個問題,需要訪問一個官方包的未導(dǎo)出變量,發(fā)現(xiàn)可以通過反射獲取,于是記錄下來:
首選我們建個新的包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
其實是能獲取未導(dǎo)出的變量的。
reflect.ValueOf
返回的是結(jié)構(gòu)體Value
,接下來我們查看Value
方法,可以看到一個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
到此,相信大家對“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。