首页 > 解决方案 > 反射类型比较

问题描述

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

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

这是正确的方法吗?

标签: goreflection

解决方案


是的,如果密钥类型是 "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。)


推荐阅读