Go
Zero wartości
Szukaj…
Uwagi
Należy zwrócić uwagę na jedną rzecz - typy, które mają zerową wartość zerową, takie jak łańcuchy, liczby całkowite, zmiennoprzecinkowe, boole i struktury, nie mogą być ustawione na zero.
Podstawowe wartości zerowe
Zmienne w Go są zawsze inicjowane niezależnie od tego, czy podajesz im wartość początkową, czy nie. Każdy typ, w tym typy niestandardowe, ma wartość zerową, dla której jest ustawiony, jeśli nie otrzyma wartości.
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
Dotyczy to również map, wycinków, kanałów i typów funkcji. Te typy zostaną zainicjowane do zera. W tablicach każdy element jest inicjowany na wartość zerową odpowiedniego typu.
Bardziej złożone wartości zerowe
W plasterkach wartość zero jest pustym plasterkiem.
var myIntSlice []int // [] - an empty slice
Użyj make
aby utworzyć plasterek wypełniony wartościami, wszelkie wartości utworzone w plasterku zostaną ustawione na wartość zerową typu plasterka. Na przykład:
myIntSlice := make([]int, 5) // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println(myIntSlice[3])
// Prints 0
W tym przykładzie myIntSlice
jest myIntSlice
int
zawierającym 5 elementów, z których wszystkie mają wartość 0, ponieważ jest to zero dla typu int
.
Możesz również utworzyć plasterek za pomocą new
, spowoduje to utworzenie wskaźnika do plasterka.
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
Uwaga: Wskaźniki plasterków nie obsługują indeksowania, więc nie możesz uzyskać dostępu do wartości za pomocą myIntSlice[3]
, zamiast tego musisz to zrobić jak (*myIntSlice)[3]
.
Struct Zero Values
Podczas tworzenia struktury bez inicjalizacji, każde pole struktury jest inicjowane do odpowiedniej wartości zerowej.
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"
}
Array Zero Values
Zgodnie z blogiem Go :
Tablice nie muszą być inicjowane jawnie; zerowa wartość tablicy jest gotową do użycia tablicą, której elementy same są zerowane
Na przykład myIntArray
jest inicjowany z zerową wartością int
, która wynosi 0:
var myIntArray [5]int // an array of five 0's: [0, 0, 0, 0, 0]