Go获取结构体未导出私有变量

本篇内容主要讲解“Go获取结构体未导出私有变量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go获取结构体未导出私有变量”吧!

镶黄ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

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获取结构体未导出私有变量”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


当前文章:Go获取结构体未导出私有变量
当前地址:http://bzwzjz.com/article/jsehhg.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 网站制作报价 成都网站建设公司 重庆企业网站建设 网站设计公司 成都网站制作 成都品牌网站设计 成都网站设计 营销型网站建设 企业网站建设公司 成都网站建设 定制级高端网站建设 成都营销网站建设 做网站设计 网站制作 成都网站建设公司 手机网站制作设计 手机网站建设 企业网站设计 成都网站建设 成都网站设计 网站设计制作 成都模版网站建设