Поиск…


замечания

Одно замечание - типы, которые имеют нулевое значение, отличное от нуля, такие как строки, ints, floats, bools и structs, не могут быть установлены на nil.

Основные нулевые значения

Переменные в Go всегда инициализируются независимо от того, даете ли вы им начальное значение или нет. Каждый тип, включая настраиваемые типы, имеет нулевое значение, на которое они установлены, если не задано значение.

var myString string      // "" - an empty string
var myInt int64          // 0 - applies to all types of int and uint
var myFloat float64      // 0.0 - applies to all types of float and complex
var myBool bool          // false
var myPointer *string    // nil
var myInter interface{}  // nil

Это также относится к картам, срезам, каналам и типам функций. Эти типы будут инициализированы до нуля. В массивах каждый элемент инициализируется нулевым значением соответствующего типа.

Более сложные нулевые значения

В срезах нулевое значение представляет собой пустой фрагмент.

var myIntSlice []int    // [] - an empty slice

Используйте make для создания среза, заполненного значениями, любые значения, созданные в срезе, устанавливаются в нулевое значение типа среза. Например:

myIntSlice := make([]int, 5)    // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println(myIntSlice[3])
// Prints 0

В этом примере myIntSlice представляет собой фрагмент int , содержащий 5 элементов, которые являются 0, потому что это нулевое значение для типа int .

Вы также можете создать срез с new , это создаст указатель на фрагмент.

myIntSlice := new([]int)        // &[] - a pointer to an empty slice
*myIntSlice = make([]int, 5)    // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println((*myIntSlice)[3])
// Prints 0

Примечание. Указатели фрагментов не поддерживают индексацию, поэтому вы не можете получить доступ к значениям с помощью myIntSlice[3] , вместо этого вам нужно сделать это как (*myIntSlice)[3] .

Struct Zero Values

При создании структуры без ее инициализации каждое поле структуры инициализируется соответствующим нулевым значением.

type ZeroStruct struct {
    myString string
    myInt    int64
    myBool   bool
}

func main() {
    var myZero = ZeroStruct{}
    fmt.Printf("Zero values are: %q, %d, %t\n", myZero.myString, myZero.myInt, myZero.myBool)
    // Prints "Zero values are: "", 0, false"
}

Нулевые значения массива

Согласно блогу Go :

Массивы не нужно явно инициализировать; нулевое значение массива - это готовый к использованию массив, элементы которого сами обнуляются

Например, myIntArray инициализируется нулевым значением int , которое равно 0:

var myIntArray [5]int     // an array of five 0's: [0, 0, 0, 0, 0]


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow