go - 反射类型比较
问题描述
我想确保map
键的类型是string
. Key()
方法返回Type
,我不确定检查它是否是string
. 我唯一想到的是:
if v.Type().Key() == reflect.TypeOf("") {
fmt.Print("It is string")
}
这是正确的方法吗?
解决方案
是的,如果密钥类型是 "exactly" ,您所做的报告string
。
但是例如,如果键类型是一个自定义类型,string
它的底层类型是这样的,就像在这个例子中一样:
type mystr string
m := map[mystr]int{}
那么密钥类型将不等于reflect.TypeOf("")
。
如果这是你想要的,这取决于你。如果你也想接受上述地图类型,你可以检查键的类型,如果它等于reflect.String
这样:
if v.Type().Key() == reflect.TypeOf("") {
fmt.Print("It is string")
}
if v.Type().Key().Kind() == reflect.String {
fmt.Print("It is string kind")
}
对于上述map[mystr]int
内容,这是输出(在Go Playground上尝试):
It is string kind
(钥匙不是 type string
,但它是 kind string
。)
推荐阅读
- c# - 改变控制器 ASP.Net 5 中的文化
- javascript - RxJs 结合不同的并基于流执行不同的动作
- c# - 如何将并发队列转换为不可变队列
- macos - 如何在 Mac 上仅显示当前桌面中活动的应用程序
- javascript - Usercript access to Dynamically generated (Vaadin framework) content
- go - ioutils.WriteFile() 不尊重权限
- python - 将 ireg 转换为 XML
- xamarin.forms - Xamarin.Forms ScrollView ScrollToAsync 行为
- r - R-在合并中返回不匹配的产品
- r - 使用 library('tidyverse') 而不是子包有什么好处?