为了账号安全,请及时绑定邮箱和手机立即绑定

反映类型比较

反映类型比较

Go
慕婉清6462132 2023-05-08 15:48:56
map我想确保键的类型是string. Key()方法返回Type,我不确定检查它是否是string. 我唯一想到的是:if v.Type().Key() == reflect.TypeOf("") {     fmt.Print("It is string") }这是正确的方法吗?
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

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


查看完整回答
反对 回复 2023-05-08
?
开满天机

TA贡献1786条经验 获得超12个赞

您可以提取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

}

查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信