Go语言基础教程:类型断言用法介绍

41 阅读1分钟

在 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。