Heim >Backend-Entwicklung >Golang >Warum gibt fmt.Println „schlechter Fehler' anstelle von 5 aus, wenn eine Ganzzahl die Fehlerschnittstelle in Go implementiert?

Warum gibt fmt.Println „schlechter Fehler' anstelle von 5 aus, wenn eine Ganzzahl die Fehlerschnittstelle in Go implementiert?

Barbara Streisand
Barbara StreisandOriginal
2024-12-04 02:47:09479Durchsuche

Why Does fmt.Println Print

Golang-Schnittstelle: Die Transformation einer Ganzzahl in „Bad Error“ verstehen

Bei der Arbeit mit Schnittstellen in Golang ist es wichtig, das Verhalten von Typen zu verstehen, die das implementieren Error()-Methode. Wie im angegebenen Codeausschnitt veranschaulicht:

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) //output: bad error, not 5
}

Die Absicht besteht darin, die Error()-Methode für Typ T zu definieren, wobei erwartet wird, dass der Wert 5 ausgegeben wird. Die Ausgabe zeigt jedoch überraschenderweise „schlechter Fehler“ an. Um dieses Phänomen zu klären, müssen wir uns mit der Dokumentation des fmt-Pakets befassen:

„Wenn ein Operand die Fehlerschnittstelle implementiert, wird die Error-Methode aufgerufen, um das Objekt in einen String umzuwandeln, der dann formatiert wird.“ wie vom Verb gefordert (falls vorhanden).“

Zusätzlich: „Für jede Printf-ähnliche Funktion gibt es auch eine Print-Funktion, die kein Format annimmt und der Angabe von %v für jeden entspricht.“ Operand. Eine andere Variante: Println fügt Leerzeichen zwischen Operanden ein und hängt eine neue Zeile an.“

In diesem Fall wird Println() ohne Angabe eines Formats verwendet, was der Verwendung von %v entspricht. Da T die Fehlerschnittstelle implementiert, wird die Methode Error() aufgerufen, die den Wert in „schlechter Fehler“ umwandelt, der anschließend gedruckt wird.

Um den ganzzahligen Wert zu drucken, ist es notwendig, einen bestimmten Formatbezeichner zu verwenden, wie zum Beispiel:

fmt.Printf("%d", v) // Will print the integer value

Das obige ist der detaillierte Inhalt vonWarum gibt fmt.Println „schlechter Fehler' anstelle von 5 aus, wenn eine Ganzzahl die Fehlerschnittstelle in Go implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn