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]


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow