结构体的零值

这是示例代码:


package main


import (

    "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{}是一样的吧?


GCT1015
浏览 187回答 3
3回答

Qyouu

为什么在有一些文档时(正确)猜测?当通过声明或 new 调用为变量分配存储空间时,或通过复合文字或 make 调用创建新值时,并且未提供显式初始化,则给出变量或值一个默认值。此类变量或值的每个元素都设置为其类型的零值:false 对于布尔值,0 对于整数,0.0 对于花车,"" 对于字符串,以及nil指针、函数、接口、切片、通道和映射。此初始化是递归完成的,因此例如,如果未指定任何值,则结构数组的每个元素都将其字段清零。请注意,无法将结构值设置为nil(但您可以将指向结构的指针的值设置为nil)。

呼如林

我不相信最高投票的答案措辞明确来回答这个问题,所以这里有一个更清楚的解释:“如果没有指定值,数组或结构的元素将把它的字段归零。这个初始化是递归完成的:”
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go