一尘不染

Golang中Struct的零值

go

这是示例代码:

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 Aele2 := A{}

因此,结构的零值不是nil,而是所有属性均初始化为零值的结构。猜对了吗?

如果猜测是正确的,那么的自然var ele Aele2 := A{}是一样的吧?


阅读 1328

收藏
2020-07-02

共1个答案

一尘不染

为什么要(正确地)猜测有一些文档

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

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

  • false 对于布尔,
  • 0 对于整数,
  • 0.0 对于花车
  • "" 对于字符串,
  • 以及nil指针,函数,接口,切片,通道和映射。

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

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

2020-07-02