猿问

在 Go 中,如何使用反射在结构上设置映射的值?

在 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.


先感谢您。


三国纷争
浏览 73回答 1
1回答

米脂

您可以通过替换来获得地图的可寻址值:rv := reflect.ValueOf(mapped)和:rv := reflect.ValueOf(&mapped).Elem()然后你可以打电话:f := rv.FieldByName("M")  f.Set(mv)和以前一样。获取指针的值,然后使用间接获取指向的值是不同之处。否则reflect.ValueOf,将获得结构的不可寻址副本,就像任何其他函数一样。
随时随地看视频慕课网APP

相关分类

Go
我要回答