Suche…


Erläuterung

Nullwerte oder Nullinitialisierung sind einfach zu implementieren. Bei Sprachen wie Java kann es kompliziert erscheinen, dass einige Werte gleich nil können, andere dagegen nicht. Zusammenfassend aus Zero Value: Die Spezifikation der Go-Programmiersprache :

Nur Zeiger, Funktionen, Schnittstellen, Schnitte, Kanäle und Karten können null sein. Der Rest wird basierend auf den jeweiligen Typen mit falschen, null oder leeren Zeichenfolgen initialisiert.

Wenn eine Funktion eine Bedingung überprüft, können Probleme auftreten:

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

Der Nullwert ist bereits vor der Implementierung falsch. Unit-Tests, die von der Rückgabe dieser Funktion abhängen, können falsche Positive / Negative ergeben.

Eine typische Problemumgehung besteht darin, auch einen Fehler zurückzugeben, der in Go idiomatisch ist:

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())
    }
    
}

spiele es auf dem Spielplatz

Wenn Sie sowohl eine Struktur als auch einen Fehler zurückgeben, benötigen Sie eine Rückgabestruktur, die nicht sehr elegant ist. Es gibt zwei Gegenoptionen:

  • Mit Schnittstellen arbeiten: Geben Sie Null zurück, indem Sie eine Schnittstelle zurückgeben.
  • Mit Zeigern arbeiten: Ein Zeiger kann nil

Der folgende Code gibt beispielsweise einen Zeiger zurück:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow