Go
Nollvärden
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())
}
}
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
}