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

我可以在 Golang 中将变量类型与 .(type) 进行比较吗?

我可以在 Golang 中将变量类型与 .(type) 进行比较吗?

Go
隔江千里 2021-12-07 10:39:41
我对接口变量的 .(type) 语法很困惑。是否可以像这样使用它:var a,b interface{}// some codeif first.(type) == second.(type) {}还是reflect.TypeOf() 是检查a 和b 的基础类型是否相同的唯一选项?我在上面的代码中做了什么比较?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

someInterface.(type)是仅使用在型的开关。事实上,如果您尝试运行它,您会在错误消息中看到它。


func main() {

    var a, b interface{}

    a = 1

    b = 1


    fmt.Println(a.(type) == b.(type))

}

prog.go:10: 使用 .(type) 外部类型开关


你可以做的是a.(int) == b.(int),这与int(a) == int(b)


func main() {

    var a, b interface{}

    a = 1

    b = 1


    fmt.Println(a.(int) == b.(int))

}



查看完整回答
反对 回复 2021-12-07
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您需要指定类型。该语法用于对接口进行类型断言,而不是检查特定类型。你将不得不使用reflect.TypeOf它。

您可以查看此答案以正确使用类型断言。


查看完整回答
反对 回复 2021-12-07
?
HUWWW

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

func isType(a, b interface{}) bool {

    return fmt.Sprintf("%T", a) == fmt.Sprintf("%T", b)

}

"%T"fmt 选项在幕后使用反射,这将使上述语句实际上与以下语句相同:


func isType(a, b interface{}) bool {

    return reflect.TypeOf(a) == reflect.TypeOf(b)

}

任何一个都可以工作,并且不会像其他一些建议一样尝试使用任何类型的断言


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

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