为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
三国纷争 2022-07-04 10:33:09
在 Go 中,如何使用 reflect 包来设置 a 的值map?package mainimport (    "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.先感谢您。
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

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

rv := reflect.ValueOf(mapped)

和:

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

然后你可以打电话:

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

和以前一样。

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


查看完整回答
反对 回复 2022-07-04
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信