在 Go 语言中,类型断言是一种用于检查接口值底层具体类型的机制。它的语法形式为:
value, ok := x.(T)
其中,x
是接口类型的值,T
是断言的具体类型,value
是 x
的底层值,ok
是一个布尔值,表示断言是否成功。
类型断言的两种形式:
-
断言成功:
如果
x
的底层类型是T
,那么ok
将为true
,value
将包含x
的底层值。var i interface{} = 42 value, ok := i.(int) if ok { fmt.Println("断言成功:", value) } else { fmt.Println("断言失败") }
-
断言失败:
如果
x
的底层类型不是T
,那么ok
将为false
,value
将为T
类型的零值。var i interface{} = "hello" value, ok := i.(int) if ok { fmt.Println("断言成功:", value) } else { fmt.Println("断言失败") }
下面是一个更完整的例子,演示了如何在一个函数中使用类型断言来处理不同类型的参数:
package main
import "fmt"
func printValue(v interface{}) {
switch val := v.(type) {
case int:
fmt.Println("整数:", val)
case float64:
fmt.Println("浮点数:", val)
case string:
fmt.Println("字符串:", val)
default:
fmt.Println("未知类型")
}
}
func main() {
printValue(42) // 输出:整数: 42
printValue(3.14) // 输出:浮点数: 3.14
printValue("hello") // 输出:字符串: hello
printValue(true) // 输出:未知类型
}
在 printValue
函数中,使用了 switch
语句结合类型断言来判断参数的具体类型并执行相应的操作。这样,可以在不同类型的参数下执行不同的逻辑。