Go 反映类型比较
我想确保Go 反映类型比较,go,reflection,Go,Reflection,我想确保map键的类型是stringKey()。我唯一想到的是: if v.Type().Key() == reflect.TypeOf("") { fmt.Print("It is string") } 这是正确的方法吗?您可以提取密钥的种类,并在reflect包(如reflect.String中使用种类枚举来对抗它,如下所示: package main import ( "fmt" "reflect" ) func main() { obj := ma
map
键的类型是string
Key()。我唯一想到的是:
if v.Type().Key() == reflect.TypeOf("") {
fmt.Print("It is string")
}
这是正确的方法吗?您可以提取密钥的种类
,并在reflect
包(如reflect.String
中使用种类枚举来对抗它,如下所示:
package main
import (
"fmt"
"reflect"
)
func main() {
obj := make(map[string]interface{})
fmt.Println(reflect.TypeOf(obj).Key().Kind() == reflect.String) // It will print true
}
如果您想尝试,请查看此项。您可以提取密钥的种类
,并在reflect
包中使用种类枚举,如reflect.String
:
package main
import (
"fmt"
"reflect"
)
func main() {
obj := make(map[string]interface{})
fmt.Println(reflect.TypeOf(obj).Key().Kind() == reflect.String) // It will print true
}
如果您想尝试,请查看此项。是的,您所做的操作会报告密钥类型是否为“精确”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")
}
对于上面的映射[mystr]int
,这是输出(在上尝试):
(键的类型不是string
,而是string
)是的,如果键的类型是“精确的”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")
}
对于上面的映射[mystr]int
,这是输出(在上尝试):
(键不是类型string
,而是种类string
)你在找种类吗?@Volker如我所说,我只想确保键是一根string你在找种类吗?@Volker如我所说,我只想确保键是一根字符串