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
Freigeben: 2024-12-09 07:46:07
Original
780 Leute haben es durchsucht

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"
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage