Struct Нулевое значение в golang

Вот пример кода:

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{}

Таким образом, значение struct Zero - это не nil, а структура, в которой все свойства являются инициализированными значениями Zero. Правильно ли предположение?

Если предположение верно, то природа var ele A и ele2 := A{} одинакова, верно?

Ответ 1

Зачем угадывать (правильно), когда некоторая документация?

Когда хранилище выделяется для переменной, либо посредством объявления, либо вызова нового, либо когда создается новое значение, либо через составной литерал, либо вызов make, и не предоставляется явная инициализация, переменной или значению присваивается значение по умолчанию.

Каждый элемент такой переменной или значения устанавливается на нулевое значение для своего типа:

  • false для booleans,
  • 0 для целых чисел,
  • 0.0 для float,
  • "" для строк,
  • и nil для указателей, функций, интерфейсов, срезов, каналов и карт.

Эта инициализация выполняется рекурсивно, поэтому, например, каждый элемент массива структур будет иметь свои поля обнуленными, если не указано значение.

Обратите внимание, что нет возможности установить значение struct в nil (но вы можете установить значение указателя на struct на nil).