这篇文章主要介绍去语言如何从结构体中获取某个字段的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
去语言提供了用户。名语法,来从用户结构体中获取名称的值。那么如果我们想将名字变成变量该如何做呢?
原型:getStructField(输入接口{},关键字符串)(价值界面{},犯错错误)
功能:从输入结构体中,取出关键字段对应的值
代码实现:
包跑龙套
import (
,,“errors"
,,“fmt"
,,“reflect"
)
func GetStructStringField(输入接口{},关键字符串)(值字符串,犯错错误){
,,v,犯错:=getStructField(输入键)
,,如果犯错!=nil {
,,,,返回
,,}
,,价值,好的:=v(字符串)
,,如果!好{
,,,,返回值,errors.New(“停下来# 39;t转换关键# 39;v string")
,,}
,,返回
}
,
func GetStructFloat64Field(输入接口{},关键字符串)(价值float64,犯错错误){
,,v,犯错:=getStructField(输入键)
,,如果犯错!=nil {
,,,,返回
,,}
,,价值,好的:=v (float64)
,,如果!好{
,,,,返回值,errors.New(“停下来# 39;t转换关键# 39;v float64")
,,}
,,返回
}
,
func getStructField(输入接口{},关键字符串)(价值界面{},犯错错误){
,,房车:=reflect.ValueOf(输入)
,,rt:=reflect.TypeOf(输入)
,,如果rt.Kind() !=反映。结构体{
,,,,返回值,errors.New(“输入必须struct")
,,}
,
,,keyExist:=false
,,我:=0;我& lt;rt.NumField ();我+ + {
,,,,curField:=rv.Field (i)
,,,,如果rt.Field(我)。名称==键{
,,,,,,开关curField.Kind () {
,,,,,,情况反映。字符串,反映。Int64,反映。Int32,反映。Int16,反映。Int8,反映。Int,反映。Float64 reflect.Float32:
,,,,,,,,keyExist=true
,,,,,,,,值=https://www.yisu.com/zixun/curField.Interface ()
,,,,,,默认值:
,,,,,,,,返回值,errors.New(“键必须是int浮动或string")
,,,,,,}
,,,,}
,,}
,,如果! keyExist {
,,,,返回值,errors.New (fmt.Sprintf(“中没有关键% s % & # 39; s field",钥匙,rt))
,,}
,,返回
}
测试:
func TestGetStructFiled (t * testing.T) {
,,user1:=用户{
,,,,ID:,,1,
,,,,名称:“aaa",
,,}
,,v,犯错:=GetStructStringField (user1,“NAME")
,,fmt。Println (v,犯错)
}
测试结果
以上是去语言如何从结构体中获取某个字段的值的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!aaa & lt; nil>