去语言如何从结构体中获取某个字段的值

这篇文章主要介绍去语言如何从结构体中获取某个字段的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

去语言提供了用户。名语法,来从用户结构体中获取名称的值。那么如果我们想将名字变成变量该如何做呢?

原型: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>

以上是去语言如何从结构体中获取某个字段的值的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

去语言如何从结构体中获取某个字段的值