我的地图有一个零键值:
mapp := map[interface{}]interface{}{
nil: "a",
}
访问它的nil密钥直接起作用:
fmt.Println("key[nil]:", mapp[nil])
但是使用反射却没有 - 怎么做?
rmapp := reflect.ValueOf(mapp)
rkey := reflect.ValueOf(interface{}(nil))
rval := rmapp.MapIndex(rmapp.MapIndex(rkey))
fmt.Println("key[nil]:", rval)
此处有非工作代码:
https://play.golang.org/p/6TKN_tDNgV
答案 0 :(得分:5)
以下是为reflect.Value
类型的nil
值创建interface{}
的一种方法:
rkey := reflect.ValueOf(new(interface{})).Elem()
答案 1 :(得分:2)
缺失的部分似乎是地图的密钥类型的零值,这是访问地图的nil密钥所必需的。
refmap.MapIndex(reflect.Zero(refmap.Type().Key()))