Go
Valores cero
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]