Heim >Backend-Entwicklung >Golang >Warum gibt „fmt.Println' „bad error' anstelle des ganzzahligen Werts aus, wenn ein Typ die „error'-Schnittstelle implementiert?

Warum gibt „fmt.Println' „bad error' anstelle des ganzzahligen Werts aus, wenn ein Typ die „error'-Schnittstelle implementiert?

Susan Sarandon
Susan SarandonOriginal
2024-12-09 07:46:07743Durchsuche

Why Does `fmt.Println` Print

Warum gibt eine Schnittstelle „bad error“ für die Fehlermethode eines benutzerdefinierten Typs zurück?

In Go kann eine Schnittstelle verwendet werden um Methoden für einen Typ zu definieren. Wenn ein Objekt eine Schnittstelle implementiert, stellt es eine Implementierung für jede der von dieser Schnittstelle definierten Methoden bereit.

Betrachten Sie das folgende Beispiel:

type T int

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

func main() {
    var v interface{} = T(5)
    fmt.Println(v) // Output: "bad error"
}

In diesem Beispiel ist die Error-Methode definiert für den Typ T. Wenn jedoch der Wert v mit fmt.Println gedruckt wird, ist die Ausgabe „bad error“ anstelle des erwarteten ganzzahligen Werts 5. Um dieses Verhalten zu verstehen, schauen wir uns das fmt-Paket an Dokumentation:

  • Wenn ein Operand die Fehlerschnittstelle implementiert, wird die Error-Methode aufgerufen, um das Objekt in eine Zeichenfolge umzuwandeln, die dann entsprechend den Anforderungen des Verbs (falls vorhanden) formatiert wird.
  • Für jede Printf-ähnliche Funktion gibt es auch eine Print-Funktion, die kein Format annimmt und der Angabe von %v für jeden Operanden entspricht.

Hier In diesem Fall wird die Funktion fmt.Println verwendet, die fmt.Printf("%v", v) entspricht. Hier ist eine Erklärung, was passiert:

  • Da T die Fehlerschnittstelle implementiert, wird die Error-Methode für den Wert v aufgerufen.
  • Die Error-Methode gibt die Zeichenfolge „bad error“ zurück.
  • Diese Zeichenfolge wird dann mit dem %v-Verb formatiert und als Ausgabe ausgegeben.

Zum Drucken des ganzzahligen Werts von v Stattdessen können Sie fmt.Printf("%d",v).

verwenden

Das obige ist der detaillierte Inhalt vonWarum gibt „fmt.Println' „bad error' anstelle des ganzzahligen Werts aus, wenn ein Typ die „error'-Schnittstelle 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