如何使用反射访问地图的 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()
缺少的部分似乎是地图键类型的零值,这是访问地图的 nil 键所必需的。
refmap.MapIndex(reflect.Zero(refmap.Type().Key()))
我有一个具有 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()
缺少的部分似乎是地图键类型的零值,这是访问地图的 nil 键所必需的。
refmap.MapIndex(reflect.Zero(refmap.Type().Key()))