猿问

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

如果我定义了一个类型type myInt64 int64,我将如何使用反射来设置它?恐慌下面的代码反映.Set:int64类型的值不能分配给main.myInt64类型 http://play.golang.org/p/scsXq4ofk6


package main


import (

    "fmt"

    "reflect"

)


type myInt64 int64


type 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)

}


函数式编程
浏览 144回答 1
1回答

鸿蒙传说

您必须为分配提供正确的类型。没有隐式类型转换。您可以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
随时随地看视频慕课网APP

相关分类

Go
我要回答