您好,登錄后才能下訂單哦!
本篇內容主要講解“Go獲取結構體未導出私有變量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Go獲取結構體未導出私有變量”吧!
Go語音通過首字符的大小寫來限制變量、函數的包外可見性。最近遇到個問題,需要訪問一個官方包的未導出變量,發現可以通過反射獲取,于是記錄下來:
首選我們建個新的包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
其實是能獲取未導出的變量的。
reflect.ValueOf
返回的是結構體Value
,接下來我們查看Value
方法,可以看到一個FieldByName
函數,從名字不難看出,它是通過字段名獲取字段。
接下來嘗試通過FieldByName
獲取變量。需要注意的是FieldByName
返回的是Value
類型,你可能需要經過類型裝換后才能使用。
func main(){ user:= user.NewUser() v:=reflect.ValueOf(user) fmt.Println(v.FieldByName("id")) fmt.Println(v.FieldByName("id").Int()) }
程序輸出為:
2 2
到此,相信大家對“Go獲取結構體未導出私有變量”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。