如何使用反射包操纵结构中的地图字段?

cnby:

我们有一个像这样的结构:

type S struct {
    M map[string]bool
}

以及我们如何实现这样的功能:


// this function modify field by name to a new map
func Modify(s *S, name string, val map[string]bool){
  ...
}

func Test() {
    s := S{
        M: map[string]bool{"Hello":true},
    }
    m := map[string]bool{"World":false}
    Modify(&s, "M", m)
}

反射包支持SetInt / SetString / etc,但不支持SetMap。有什么办法解决这个问题?

Uvelichitel:

reflect.Set()

func Modify(s *S, name string, val interface{}) {
    rv := reflect.ValueOf(val)
    if !rv.IsValid() {
        rv = reflect.Zero(reflect.ValueOf(s).Elem().FieldByName(name).Type())
    }
    reflect.ValueOf(s).Elem().FieldByName(name).Set(rv)
}

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

使用反射访问结构中的结构字段

来自分类Dev

如何使用反射更改字段的结构片段?

来自分类Dev

使用反射从地图填充结构

来自分类Dev

使用反射比较结构字段

来自分类Dev

使用反射更新结构字段

来自分类Dev

如何使用反射初始化结构值字段?

来自分类Dev

使用反射附加到结构中的切片字段

来自分类Dev

使用反射在Golang中打印结构指针字段类型

来自分类Dev

使用反射访问 golang 中包的私有字段

来自分类Dev

如何在抖动中操纵地图?

来自分类Dev

使用反射获取结构字段的名称

来自分类Dev

Golang使用反射设置结构字段

来自分类Dev

如何使用反射在Go中查找空结构值?

来自分类Java

如何使用反射访问对象中的字段值

来自分类Dev

如何使用反射来反转地图

来自分类Dev

如何使用反射访问地图的nil键?

来自分类Dev

如何使用反射制作地图指针?

来自分类Dev

如何使用反射来检查结构字段的类型是否为interface {}?

来自分类Dev

如何使用反射将结构的每个字段设置为非零值

来自分类Dev

使用反射更新结构中的属性

来自分类Dev

如何使用反射包获取chan的类型

来自分类Dev

如何正确使用。调用反射包

来自分类Dev

C#反射-如何设置结构的字段值

来自分类Dev

如何操纵xlim和ylim在R中绘制地图

来自分类Dev

允许反射以从Go中的结构获取未导出的字段

来自分类Dev

使用反射解引用结构指针和访问字段

来自分类Dev

查找使用反射时哪个结构字段不相等

来自分类Dev

如何通过反射获取字段的包名?