如何使用反射访问地图的零密钥?

时间:2015-01-07 14:38:19

标签: go

我的地图有一个零键值:

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

2 个答案:

答案 0 :(得分:5)

以下是为reflect.Value类型的nil值创建interface{}的一种方法:

rkey := reflect.ValueOf(new(interface{})).Elem()

playground example

答案 1 :(得分:2)

缺失的部分似乎是地图的密钥类型的零值,这是访问地图的nil密钥所必需的。

refmap.MapIndex(reflect.Zero(refmap.Type().Key()))

playground example