Type Assertion 类型断言
在 Go 语言中,类型断言(Type Assertion) 是一种用于从接口值中提取其底层具体类型的操作。它是 Go 实现多态和类型安全的重要机制之一。 一、基本语法 value, ok := interfaceVar.(ConcreteType) interfaceVar:一个接口类型的变量 ConcreteType:你期望它实际存储的具体类型(如 int, string, MyStruct 等) value:如果断言成功,就是该类型的值 ok:布尔值,表示断言是否成功 二、为什么需要类型断言? Go 的接口(interface)可以存储任何类型的值,但当你想使用这个值的具体方法或字段时,就必须知道它的真实类型。 var i interface{} = “hello” // 我知道它是 string,但接口本身不能直接调用 len() s := i.(string) // 类型断言:断言 i 是 string fmt.Println(len(s)) // 现在可以了 三、两种写法 安全断言(推荐) —— 带 ok 判断 s, ok := i.(string) if ok { fmt.Println("字符串长度:", len(s)) } else { fmt.Println("i 不是一个字符串") } 优点:不会 panic,适合不确定类型时使用。 直接断言 —— 不检查 ok s := i.(string) // 如果 i 不是 string,会 panic! 面临的风险:如果类型不匹配,程序会崩溃(panic)。 仅在你100%确定类型时使用。 ...