Buscar..


Observaciones

Una cosa a tener en cuenta: los tipos que tienen un valor cero no nulo como cadenas, ints, flotantes, bools y estructuras no se pueden establecer en nil.

Valores básicos de cero

Las variables en Go siempre se inicializan, ya sea que les de un valor de inicio o no. Cada tipo, incluidos los tipos personalizados, tiene un valor cero al que están establecidos si no se les asigna un valor.

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

Esto también se aplica a mapas, segmentos, canales y tipos de funciones. Estos tipos se inicializarán a cero. En las matrices, cada elemento se inicializa al valor cero de su tipo respectivo.

Valores de cero más complejos

En rebanadas el valor cero es una rebanada vacía.

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

Utilice make para crear una división rellena con valores, cualquier valor creado en la división se establece en el valor cero del tipo de la división. Por ejemplo:

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

En este ejemplo, myIntSlice es un segmento int que contiene 5 elementos que son todos 0 porque ese es el valor cero para el tipo int .

También puede crear una división con new , esto creará un puntero a una división.

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

Nota: los punteros de myIntSlice[3] no admiten la indexación, por lo que no puede acceder a los valores utilizando myIntSlice[3] , en su lugar, debe hacerlo como (*myIntSlice)[3] .

Valores cero de Struct

Al crear una estructura sin inicializarla, cada campo de la estructura se inicializa a su valor cero respectivo.

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

Valores Cero Arreglos

Según el blog Go :

Las matrices no necesitan inicializarse explícitamente; el valor cero de una matriz es una matriz lista para usar cuyos elementos están ellos mismos en cero

Por ejemplo, myIntArray se inicializa con el valor cero de int , que es 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow