作者:亿达口香糖 | 来源:互联网 | 2022-12-06 15:52
地图中struct的默认值是多少?如何检查地图值是否已初始化?
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{}
?
1> Himanshu..:
结构的默认值是每个字段的零值,根据其类型不同.
当通过声明或调用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)是bool,如果键存在于映射中,则为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)
}
去游乐场