如果我定义了一个类型 type myInt64 int64
我将如何使用反射来设置它?下面的代码 panic reflect.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)
}
最佳答案
您必须为作业提供正确的类型。没有隐式类型转换。
你可以为你的函数提供一个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))
}
关于go - 如何在 Go 中使用基类型设置结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837440/