golang null

在 Go 语言中,并没有直接的“null”概念,但有几种方式可以表示一个变量的“空”状态:
零值
:每种类型都有自己的零值,比如整数的零值是
0
,字符串的零值是空字符串
“”
,布尔类型的零值是
false
。
nil
:
nil
是 Go 语言中表示“空”的关键字,它可以用来表示指针、切片、映射、通道、函数和接口的空状态。
指针
:如果一个指针变量没有指向任何对象,可以赋值为
nil
。
切片
:切片的
nil
状态表示它没有指向任何数组。
映射
:映射的
nil
状态表示它没有存储任何键值对。
通道
:通道的
nil
状态表示它没有被初始化。
函数
:函数的
nil
状态表示它没有指向任何函数。
接口
:接口的
nil
状态表示它没有存储任何值,或者存储的值是该接口类型的零值。
空接口
:空接口
interface{}
可以存储任何类型的值,包括
nil
。
指针类型
:对于自定义类型,你可以定义一个指针类型的零值,比如
*MyType(nil)
。
自定义类型
:你可以定义一个自定义类型,比如
type MyType struct{}
,然后使用
MyType{}
来表示一个空的
MyType
实例。
使用
value
包
:Go 1.18 引入了泛型,你可以使用
value
包来检查一个值是否为它的类型的零值。
import “reflect”

var myVar MyType
isEmpty := reflect.ValueOf(myVar).IsZero()
在处理接口类型时,
nil
接口和空接口是两个不同的概念:
nil
接口
:没有存储任何值的接口。
空接口
:存储了值,但这个值是它类型的零值。
例如:
var myInterface interface{} = nil // myInterface 是 nil 接口
var myString string = “” // myString 是空接口,存储了 string 类型的零值
在实际编程中,你应该根据上下文和需求来决定使用哪种方式来表示“空”状态。