英文:
How to access map's nil key using reflection?
问题
我有一个包含空键值的地图:
mapp := map[interface{}]interface{}{
nil: "a",
}
直接访问它的空键是可以的:
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
英文:
I have a map that has a nil-keyed value:
mapp := map[interface{}]interface{}{
nil: "a",
}
Accessing it's nil key's directly works:
fmt.Println("key[nil]:", mapp[nil])
But using reflection it doesn't - how to do this?
rmapp := reflect.ValueOf(mapp)
rkey := reflect.ValueOf(interface{}(nil))
rval := rmapp.MapIndex(rmapp.MapIndex(rkey))
fmt.Println("key[nil]:", rval)
Non-working code here:
https://play.golang.org/p/6TKN_tDNgV
答案1
得分: 5
这是一种创建类型为interface{}
的nil
值的reflect.Value
的方法:
rkey := reflect.ValueOf(new(interface{})).Elem()
英文:
Here's one way to create a reflect.Value
for a nil
value of type interface{}
:
rkey := reflect.ValueOf(new(interface{})).Elem()
答案2
得分: 2
缺失的部分似乎是地图键类型的零值,这是访问地图的nil键所需的。
refmap.MapIndex(reflect.Zero(refmap.Type().Key()))
英文:
The missing piece appears to have been the zero value of the map's key type, which is needed to access the nil key of the map.
refmap.MapIndex(reflect.Zero(refmap.Type().Key()))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论