Sök…


Förklaring

Nollvärden eller nollinitialisering är enkla att implementera. Kommer från språk som Java kan det tyckas komplicerat att vissa värden kan vara nil medan andra inte är det. Sammanfattning från Zero Value: The Go Programming Language Specification :

Pekare, funktioner, gränssnitt, skivor, kanaler och kartor är de enda typerna som kan vara noll. Resten initialiseras till falska, noll eller tomma strängar baserat på deras respektive typer.

Om en funktion som kontrollerar vissa villkor kan problem uppstå:

func isAlive() bool {
    //Not implemented yet
    return false
}

Nollvärdet kommer att vara falskt redan före implementeringen. Enhetstester beroende på återvändande av denna funktion kan ge falska positiver / negativ.

En typisk lösning är att också returnera ett fel, vilket är idiomatiskt i Go:

package main

import "fmt"

func isAlive() (bool, error) {
    //Not implemented yet
    return false, fmt.Errorf("Not implemented yet")
}

func main() {
    _, err := isAlive()
    if err != nil {
        fmt.Printf("ERR: %s\n", err.Error())
    }
    
}

spela det på lekplatsen

När du returnerar både en struktur och ett fel behöver du en användarstruktur för retur, vilket inte är särskilt elegant. Det finns två motalternativ:

  • Arbeta med gränssnitt: Returnera noll genom att returnera ett gränssnitt.
  • Arbeta med pekare: En pekare kan vara nil

Till exempel returnerar följande kod en pekare:

func(d *DB) GetUser(id uint64) (*User, error) {
    //Some error ocurred
    return nil, err
}


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