Go - 如何检查类型相等?

假设我有以下代码:


var x interface{}

y := 4

x = y

fmt.Println(reflect.TypeOf(x))

这将打印 int 作为类型。我的问题是如何测试类型?我知道有类型开关可以做到这一点,所以我可以这样做:


switch x.(type) {

case int:

    fmt.Println("This is an int")

}

但是如果我只想检查一种特定类型的开关似乎是错误的工具。有没有更直接的方法来做这个


reflect.TypeOf(x) == int

或者类型开关是要走的路?


凤凰求蛊
浏览 244回答 3
3回答

九州编程

类型断言返回两个值..第一个是转换后的值,第二个是一个布尔值,指示类型断言是否正常工作。所以你可以这样做:_, 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

明月笑刀无情

我只是想出了另一种基于此的方法:if _, ok := x.(int); ok {    fmt.Println("This is an int")}

慕标琳琳

在Effective Go 中,您可以找到一个非常简单的示例,说明您要实现的目标。var t interface{}t = functionOfSomeType()switch t := t.(type) {default:    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t hascase bool:    fmt.Printf("boolean %t\n", t)             // t has type boolcase int:    fmt.Printf("integer %d\n", t)             // t has type intcase *bool:    fmt.Printf("pointer to boolean %t\n", *t) // t has type *boolcase *int:    fmt.Printf("pointer to integer %d\n", *t) // t has type *int}如果您必须检查单一类型,请使用简单的if,否则使用 switch 以获得更好的可读性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go