Go
Nollvärden
Sök…
Anmärkningar
En sak att notera - typer som inte har nollvärde som strängar, ints, floats, bools och strukturer kan inte ställas in på noll.
Grundläggande nollvärden
Variabler i Go initialiseras alltid oavsett om du ger dem ett startvärde eller inte. Varje typ, inklusive anpassade typer, har ett nollvärde som de ställs in på om de inte får ett värde.
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
Detta gäller även kartor, skivor, kanaler och funktionstyper. Dessa typer initialiseras till noll. I matriser initialiseras varje element till nollvärdet för dess respektive typ.
Mer komplexa nollvärden
I skivor är nollvärdet en tom skiva.
var myIntSlice []int // [] - an empty slice
Använd make
att skapa ett segment med värden, alla värden som skapas i segmentet ställs in på nollvärdet för typen av segmentet. Till exempel:
myIntSlice := make([]int, 5) // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println(myIntSlice[3])
// Prints 0
I det här exemplet är myIntSlice
en int
skiva som innehåller 5 element som alla är 0 eftersom det är nollvärdet för typen int
.
Du kan också skapa ett segment med new
, detta skapar en pekare till ett segment.
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
Obs: Skivpekare stöder inte indexering så att du inte kan komma åt värdena med hjälp av myIntSlice[3]
, istället måste du göra det som (*myIntSlice)[3]
.
Struktur nollvärden
När du skapar en struktur utan att initialisera den initialiseras varje fält i strukturen till dess respektive nollvärde.
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 nollvärden
Enligt Go-bloggen :
Matriser behöver inte initialiseras uttryckligen; nollvärdet för en matris är ett färdigt att använda array vars element själva är nollade
Till exempel myIntArray
med nollvärdet för int
, vilket är 0:
var myIntArray [5]int // an array of five 0's: [0, 0, 0, 0, 0]