如果我定义了一个类型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
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报
0/150
提交
取消