映射中结构体的默认值是多少?如何检查地图值是否初始化?
type someStruct struct {
field1 int
field2 string
}
var mapping map[int]someStruct
func main() {
mapping := make(map[int]someStruct)
}
func check(key int) {
if mapping[key] == ? {}
}
我应该检查nil
还是someStruct{}
?
结构的默认值是每个字段的零值,该值根据其类型而有所不同。
为变量分配存储时,通过 声明或调用 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( 被分配存储在键 "route" 下的值。如果该键不存在,则 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)
}
去游乐场