为了账号安全,请及时绑定邮箱和手机立即绑定

结构体的零值

结构体的零值

Go
GCT1015 2021-09-13 19:50:28
这是示例代码:package mainimport (    "fmt")type A struct {    Name string}func (this *A) demo(tag string) {    fmt.Printf("%#v\n", this)    fmt.Println(tag)}func main() {    var ele A    ele.demo("ele are called")    ele2 := A{}    ele2.demo("ele2 are called")}运行结果:&main.A{Name:""}ele are called&main.A{Name:""}ele2 are called它看起来像那些是相同的约var ele A和ele2 := A{}所以,结构体的零值不是nil,而是一个结构体,所有的属性都被初始化为零值。猜对了吗?如果猜对了,那么性质var ele A和ele2 := A{}是一样的吧?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

为什么在有一些文档时(正确)猜测?

当通过声明或 new 调用为变量分配存储空间时,或通过复合文字或 make 调用创建新值时,并且未提供显式初始化,则给出变量或值一个默认值。

此类变量或值的每个元素都设置为其类型的零值

  • false 对于布尔值,

  • 0 对于整数,

  • 0.0 对于花车,

  • "" 对于字符串,

  • 以及nil指针、函数、接口、切片、通道和映射。

此初始化是递归完成的,因此例如,如果未指定任何值,则结构数组的每个元素都将其字段清零。

请注意,无法将结构值设置为nil(但您可以将指向结构的指针的值设置为nil)。


查看完整回答
反对 回复 2021-09-13
?
呼如林

TA贡献1798条经验 获得超3个赞

我不相信最高投票的答案措辞明确来回答这个问题,所以这里有一个更清楚的解释:

“如果没有指定值,数组或结构的元素将把它的字段归零。这个初始化是递归完成的:”


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信