我想确保map
键的类型是string
。 Key()
方法返回Type
,但我不确定哪种正确的方法来检查其是否为string
。我唯一想到的是:
if v.Type().Key() == reflect.TypeOf("") {
fmt.Print("It is string")
}
这是正确的方法吗?
答案 0 :(得分:4)
是的,如果密钥类型为“完全” 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
(密钥的类型不是string
,但是类型是string
。)
答案 1 :(得分:1)
您可以提取密钥的Kind
并在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
}
如果要尝试,请参见此Go Playground snippet。