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