类型断言
· 阅读需 2 分钟
类型断言用于检查接口值的动态类型是否符合某个特定类型。
value, ok := interfaceVar.(ConcreteType)
interfaceVar
是一个接口变量ConcreteType
是你想要断言的具体类型value
是断言成功后转换的值ok
是一个布尔值,表示断言是否成功
案例1 双返回值
var writer io.Writer = os.Stdout
if closer, ok := writer.(io.Closer); ok {
closer.Close() // 安全调用接口扩展方法
}
案例2 单返回值
// 直接转换(失败时触发panic)
str := anyVar.(string)
案例3 类型匹配
var v interface{} = 42
// 基础类型匹配
_, ok1 := v.(int) // ok1 = true
_, ok2 := v.(string) // ok2 = false
// 接口类型匹配
_, ok3 := v.(fmt.Stringer) // 检查是否实现特定接口
案例4 与 switch 关键字搭配使用
.(type)
必须与 switch
一起使用。
switch v := err.(type) {
case *AppError:
// 处理自定义错误类型
case *os.PathError:
// 处理系统路径错误
case nil:
// 没有错误的情况
default:
// 未知错误类型
}