结构的默认值是每个字段的零值,根据其类型不同。
当通过声明或 new 调用为变量分配存储空间时,或者通过复合文字或 make 调用创建新值时,并且未提供显式初始化,则给出变量或值默认值。此类变量或值的每个元素的类型都设置为零值:布尔值为 false,数字类型为 0,字符串为 "",指针、函数、接口、切片、通道和映射为 nil。这种初始化是递归完成的,例如,如果没有指定值,结构数组的每个元素都将其字段归零。
type T struct { i int; f float64; next *T }
t := new(T)
以下成立:
t.i == 0
t.f == 0.0
t.next == nil
但是,如果要根据键检查映射的值(如果存在),您可以将其用作:
i, ok := m["route"]
在此语句中,第一个值 (i) 被分配存储在键“路由”下的值。如果该键不存在,则 i 是值类型的零值 (0)。第二个值 (ok) 是一个布尔值,如果键存在于映射中,则为 true,否则为 false。
对于你的问题
我应该检查 nil 还是 someStruct{} ?
要检查初始化的空结构,您可以检查为someStruct{}
:
package main
import (
"fmt"
)
type someStruct struct {
field1 int
field2 string
}
var mapping map[int]someStruct
func main() {
var some someStruct
fmt.Println(some == (someStruct{}))
//mapping := make(map[int]someStruct)
}
去游乐场