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")
}
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 以获得更好的可读性。
- 3 回答
- 0 关注
- 243 浏览
添加回答
举报