在 Go 语言中,断言是一种类型转换,它可以将一个接口类型的值转换为具体的类型。通常用于类型检查和类型转换。
语法形式
v,ok := i.(T)
- i: 是某一个接口类型变化;
- T: 期望的类型;
- v: 类型断言成功时具体类型值;
- ok: 布尔值,表示类型短短是否成功;
如果接口类型变量 i 之前被赋予的值为 T 类型的值,那么语句执行后,左侧 ok 值将为 true,变量 v 的类型为 T,它的值会是之前变量 i 的右值。如果 i 之前被赋予的值不为 T 类型的值,那么这个语句执行后,变量 ok 的值为 false,变量 v 的类型还是哪个要还原的类型,但它的值是类型 T 的零值。
代码示例
// func Get(key string) interface{} {
// return Session.Values[key]
// }
var Flashes map[string]any
var flashKey = "_flashes"
func AllMessage() Flashes {
val := session.Get(flashKey)
// 读取时必须做类型检测
flashMessages, ok := val.(Flashes)
if !ok {
return nil
}
// 读取即销毁,直接删除
session.Forget(flashKey)
return flashMessages
}
在这个示例中,将一个 map 赋值给接口变量 val,然后通过类型检查是否为 map 类型。如果类型断言成功,则 ok 为 true,val 将实际持有 Flashes 的值。反之,则为 nil。