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

How to access map's nil key using reflection?

我有一个具有 nil-keyed 值的地图:

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

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

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

playground example

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

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

playground example