悉野小楼

导航

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)其实返回两个值

posted on 2026-08-11 18:22  悉野  阅读(3)  评论(0)    收藏  举报