为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Go中使用基本类型设置结构字段

如何在Go中使用基本类型设置结构字段

Go
函数式编程 2021-11-22 18:27:48
如果我定义了一个类型type myInt64 int64,我将如何使用反射来设置它?恐慌下面的代码反映.Set:int64类型的值不能分配给main.myInt64类型 http://play.golang.org/p/scsXq4ofk6package mainimport (    "fmt"    "reflect")type myInt64 int64type MyStruct struct {    Name string    Age  myInt64}func FillStruct(m map[string]interface{}, s interface{}) error {    structValue := reflect.ValueOf(s).Elem()    for name, value := range m {        structFieldValue := structValue.FieldByName(name)        val := reflect.ValueOf(value)        structFieldValue.Set(val)    }    return nil}func main() {    myData := make(map[string]interface{})    myData["Name"] = "Tony"    myData["Age"] = int64(23)    result := &MyStruct{}    err := FillStruct(myData, result)    if err != nil {        fmt.Println(err)    }    fmt.Println(result)}
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您必须为分配提供正确的类型。没有隐式类型转换。


您可以myInt64为您的功能提供一个


myData := make(map[string]interface{})

myData["Name"] = "Tony"

myData["Age"] = myInt64(23)

http://play.golang.org/p/sbOdAnbz8n


或者您可以在赋值期间转换值


for name, value := range m {

    structFieldValue := structValue.FieldByName(name)

    fieldType := structFieldValue.Type()


    val := reflect.ValueOf(value)


    structFieldValue.Set(val.Convert(fieldType))

}

http://play.golang.org/p/kl0fEENY9b


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信