Go 的类型断言
Go 的类型断言(Type Assertion)用于在接口类型(interface)上获取其底层的具体类型或值
格式:
v := x.(T)
x:接口类型变量(interface{} 或具体接口)
T:断言的目标类型
v:如果成功,就是 x 的动态值,类型为 T
不安全的类型断言:
var i interface{} = 123
s := i.(string) // panic: interface conversion
安全的类型断言:
v, ok := x.(T)
ok == true:断言成功
ok == false:断言失败,不会 panic,v 为零值
var i interface{} = 123
s, ok := i.(string)
if !ok {
fmt.Println("not a string")
}
常见用法:
从 interface{} 中取值
判断接口是否实现额外方法
反射前的类型判断
HTTP / JSON / 中间件中处理任意值
type Client struct {
User interface{} //用户对象
}
func GetUser(c *server.Client) *model.User {
if c.User == nil {
return nil
}
return c.User.(*model.User)
}
c.User.(*model.User)其实返回两个值
浙公网安备 33010602011771号