然后创建然后通过反射修改地图

时间:2017-01-11 19:01:21

标签: go

我有一个从地图派生的新类型:

type mapp map[string]interface{}

上面有一个小功能

func (c mapp) Set() error {
    // c is nil
    c["a"] = "b"
    return nil
}

type Setter interface {
  Set() error
}

func main() {
    var aa mapp
    out := reflect.ValueOf(&aa)
    s := out.Interface().(Setter)
    s.Set()
}

这段代码适用于一个结构,为什么这个代码在涉及一种地图时会失败?

这是一个游乐场:cxx_library

非常感谢,

阿萨夫。

1 个答案:

答案 0 :(得分:2)

通过make创建Go地图(和切片)。 reflect中的等效函数为reflect.MakeMap

out := reflect.ValueOf(&aa).Elem()
out.Set(reflect.MakeMap(out.Type()))
s := out.Interface().(Setter)
s.Set()