在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唯一方法是MapIndexMapKeysMapRangeSetMapIndex(如果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/

10-10 23:57