


Warum gibt „fmt.Println' „schlechter Fehler' anstelle von 5 aus, wenn eine Go-Schnittstelle mit einer benutzerdefinierten „Fehler'-Methode verwendet wird?
Das seltsame Verhalten von Schnittstellentypen in Go verstehen
In Go definieren Schnittstellen Verträge, die es verschiedenen Typen ermöglichen, sich ähnlich zu verhalten. Bei der Verwendung von Schnittstellen mit benutzerdefinierten Methoden kann es jedoch zu unerwartetem Verhalten kommen, wie im folgenden Beispiel dargestellt:
type T int func (t T) Error() string { return "bad error" } func main() { var v interface{} = T(5) fmt.Println(v) // Output: "bad error" }
Warum gibt der obige Code den Wert von T(5) nicht wie erwartet aus? Der Grund liegt in der Art und Weise, wie Go mit Schnittstellen und deren Methoden interagiert.
fmt.Println und der %v-Formatierer
Die Funktion fmt.Println verwendet den %v-Formatierer um den Wert einer Schnittstelle auszugeben. Laut Dokumentation wird, wenn ein Operand die Fehlerschnittstelle implementiert, seine Error-Methode aufgerufen, um das Objekt in eine Zeichenfolge umzuwandeln.
In unserem Fall implementiert T die Fehlerschnittstelle mit einer benutzerdefinierten Error-Methode, die „ schlimmer Fehler". Wenn fmt.Println mit v (einem Schnittstellenwert vom Typ T) aufgerufen wird, verwendet es die Error-Methode, um seine Zeichenfolgendarstellung zu generieren. Aus diesem Grund sehen wir als Ausgabe „schlechter Fehler“ anstelle des Werts 5.
Benutzerdefinierte Formatierung
Um dieses unerwartete Verhalten zu vermeiden, können Sie eine benutzerdefinierte Formatierung von verwenden Übergeben einer Formatzeichenfolge an fmt.Printf. Zum Beispiel:
fmt.Printf("%d", v) // Output: "5"
Dies weist fmt.Printf explizit an, den Wert von v als dezimale Ganzzahl auszugeben und dabei die Standardformatierung %v zu überschreiben.
Fazit
Zu verstehen, wie Go mit Schnittstellen und dem %v-Formatierer interagiert, ist entscheidend, um unerwartetes Verhalten beim Umgang mit benutzerdefinierten Methoden und zu vermeiden Formatierung. Beachten Sie, dass die Error-Methode einer Fehlerschnittstelle das Ergebnis von fmt.Println beeinflussen kann, und verwenden Sie bei Bedarf benutzerdefinierte Formatierungen, um die gewünschte Ausgabe sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum gibt „fmt.Println' „schlechter Fehler' anstelle von 5 aus, wenn eine Go-Schnittstelle mit einer benutzerdefinierten „Fehler'-Methode verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
