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

Go - 如何检查类型相等?

Go - 如何检查类型相等?

Go
凤凰求蛊 2021-09-27 17:21:11
假设我有以下代码:var x interface{}y := 4x = yfmt.Println(reflect.TypeOf(x))这将打印 int 作为类型。我的问题是如何测试类型?我知道有类型开关可以做到这一点,所以我可以这样做:switch x.(type) {case int:    fmt.Println("This is an int")}但是如果我只想检查一种特定类型的开关似乎是错误的工具。有没有更直接的方法来做这个reflect.TypeOf(x) == int或者类型开关是要走的路?
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

类型断言返回两个值..第一个是转换后的值,第二个是一个布尔值,指示类型断言是否正常工作。


所以你可以这样做:


_, ok := x.(int)


if ok {

    fmt.Println("Its an int")

} else {

    fmt.Println("Its NOT an int")

}

..或者,简写:


if _, ok := x.(int); ok {

    fmt.Println("Its an int")

}

See it in the playground


查看完整回答
反对 回复 2021-09-27
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

我只是想出了另一种基于此的方法:


if _, ok := x.(int); ok {

    fmt.Println("This is an int")

}


查看完整回答
反对 回复 2021-09-27
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

在Effective Go 中,您可以找到一个非常简单的示例,说明您要实现的目标。


var t interface{}

t = functionOfSomeType()


switch t := t.(type) {

default:

    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has

case bool:

    fmt.Printf("boolean %t\n", t)             // t has type bool

case int:

    fmt.Printf("integer %d\n", t)             // t has type int

case *bool:

    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool

case *int:

    fmt.Printf("pointer to integer %d\n", *t) // t has type *int

}

如果您必须检查单一类型,请使用简单的if,否则使用 switch 以获得更好的可读性。


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

添加回答

举报

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