猿问

反映类型比较

map我想确保键的类型是stringKey()方法返回Type,我不确定检查它是否是string. 我唯一想到的是:

if v.Type().Key() == reflect.TypeOf("") {
    fmt.Print("It is string")
}

这是正确的方法吗?


慕婉清6462132
浏览 104回答 2
2回答

HUWWW

是的,如果键类型是 "exactly" ,你做了什么报告string。但是例如,如果键类型是一个自定义类型作为string其基础类型,就像这个例子:type mystr stringm := 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。)

开满天机

您可以提取Kind密钥并在reflect包中使用种类枚举来处理它,如下reflect.String所示:package mainimport (    "fmt"    "reflect")func main() {    obj := make(map[string]interface{})        fmt.Println(reflect.TypeOf(obj).Key().Kind() == reflect.String) // It will print true}
随时随地看视频慕课网APP

相关分类

Go
我要回答