我有一个从地图派生的新类型:
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
非常感谢,
阿萨夫。
答案 0 :(得分:2)
通过make
创建Go地图(和切片)。 reflect
中的等效函数为reflect.MakeMap
out := reflect.ValueOf(&aa).Elem()
out.Set(reflect.MakeMap(out.Type()))
s := out.Interface().(Setter)
s.Set()