0

在 Go 中,如何使用 reflect 包来设置 a 的值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
}

Value我看到的与地图有关的唯一方法是MapIndex, MapKeys, MapRangeand (如果为 nilSetMapIndex则会出现恐慌)。map

我似乎无法设置地址,因为地图不可寻址。我不确定如何将m上面分配给mapped.M.

先感谢您。

4

1 回答 1

2

您可以通过替换来获得地图的可寻址值:

rv := reflect.ValueOf(mapped)

和:

rv := reflect.ValueOf(&mapped).Elem()

然后你可以打电话:

f := rv.FieldByName("M") 
f.Set(mv)

和以前一样。

获取指针的值,然后使用间接获取指向的值是不同之处。否则reflect.ValueOf,将获得结构的不可寻址副本,就像任何其他函数一样。

于 2020-09-25T01:16:25.267 回答