Avatar ·

Wie man in Go richtig auf nil prüft: Interfaces, Strukturen und Zeiger

Hallo Kollegen! Ich bin ein Go-Anfänger und habe ein sehr seltsames Problem bei der nil-Überprüfung. Ich habe eine Funktion, die ein error-Interface zurückgibt, und ich versuche zu prüfen, ob ein Fehler aufgetreten ist. Aber mein Code verhält sich unerwartet. Hier ist ein vereinfachtes Beispiel: ```go type MyError struct { Code int Msg string } func (e *MyError) Error() string { return fmt.Sprintf("error %d: %s", e.Code, e.Msg) } func doSomething() error { var err *MyError = nil // ... irgendeine Logik, aber err bleibt nil return err } func main() { err := doSomething() if err != nil { fmt.Println("Fehler vorhanden:", err) } else { fmt.Println("Kein Fehler") } } ``` Ich erwarte, dass das Programm "Kein Fehler" ausgibt, weil ich nil zurückgebe. Aber es gibt "Fehler vorhanden: " aus. Warum passiert das? Wie prüft man in Go richtig auf nil? Ich habe gehört, dass dies mit der Funktionsweise von Interfaces zusammenhängt, aber ich verstehe die Details nicht. Ich wäre dankbar für Hilfe.