如何使用反射初始化结构的映射字段?
panic 的示例代码,我想让它工作(Playground):
package main
import (
"fmt"
"reflect"
)
type User struct {
Names map[string]string
}
func main() {
var u interface{} = User{}
names := make(map[string]string)
names["test"] = "test"
v := reflect.ValueOf(u)
n := reflect.ValueOf(names)
field := v.FieldByName("Names")
field.Set(n)
fmt.Println(v.Interface())
fmt.Println(u)
}
panic: reflect: reflect.flag.mustBeAssignable using unaddressable value
goroutine 1 [running]:
reflect.flag.mustBeAssignableSlow(0x15, 0x0)
/usr/local/go/src/reflect/value.go:247 +0x180
reflect.flag.mustBeAssignable(...)
/usr/local/go/src/reflect/value.go:234
reflect.Value.Set(0x101ec0, 0x0, 0x15, 0x101ec0, 0x43e280, 0x15)
/usr/local/go/src/reflect/value.go:1531 +0x40
main.main()
/tmp/sandbox776916734/prog.go:21 +0x200
最佳答案
package main
import (
"fmt"
"reflect"
)
type User struct {
Names map[string]string
}
func main() {
var u interface{} = &User{} // the key is here
names := make(map[string]string)
names["test"] = "test"
v := reflect.ValueOf(u)
n := reflect.ValueOf(names)
field := v.Elem().FieldByName("Names")
field.Set(n)
fmt.Println(v.Interface())
fmt.Println(u)
}
关于go - 如何使用反射初始化结构的映射字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60203038/