在Go中,如何使用反射包设置map
的值?
package main
import (
"reflect"
)
type Mapped struct {
M map[string]string
}
func main() {
m := map[string]string{"A":"VA", "B": "VB"}
mv := reflect.ValueOf(m)
mapped := Mapped{}
rv := reflect.ValueOf(mapped)
f := rv.FieldByName("M")
// f.Set(mv) doesn't work
}
我所看到的与 map 有关的Value
唯一方法是MapIndex
,MapKeys
,MapRange
和SetMapIndex
(如果map
为nil,则会出现困惑)。我似乎无法设置地址,因为 map 无法寻址。我不确定如何将上面的
m
分配给mapped.M
。先感谢您。
最佳答案
您可以通过替换以下内容来获取 map 的可寻址值:
rv := reflect.ValueOf(mapped)
和:rv := reflect.ValueOf(&mapped).Elem()
然后,您可以致电:f := rv.FieldByName("M")
f.Set(mv)
像之前一样。取一个指针的值,然后使用间接获取指向的值的方法才有所不同。否则,
reflect.ValueOf
会像其他函数一样获取您的结构的不可寻址副本。关于go - 在Go中,如何使用反射设置结构上 map 的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64056400/