类型断言
单值断言
语法格式
func main() {
var v any = "go"
s := v.(string) // 断言动态类型为 string;失败时 panic
println(s)
}
comma ok 断言
语法格式
func main() {
var v any = "go"
s, ok := v.(string) // 失败时返回 string 零值和 false
println(s, ok)
}
type switch
语法格式
package main
import "fmt"
func describe(v any) {
switch x := v.(type) { // v.(type) 只能用于 type switch
case int:
fmt.Println("int", x) // x 为 int
case string:
fmt.Println("string", x) // x 为 string
default:
fmt.Println("other")
}
}
失败行为
| 形式 | 断言成功 | 断言失败 |
|---|---|---|
v.(T) | 返回动态值 | panic |
value, ok := v.(T) | 返回动态值和 true | 返回零值和 false |
switch v.(type) | 执行匹配的类型分支 | 执行 default |