本篇内容主要讲解“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。