Heim > Backend-Entwicklung > Golang > Warum ruft „fmt.Println()' meine Stringer-Methode nicht auf?

Warum ruft „fmt.Println()' meine Stringer-Methode nicht auf?

Linda Hamilton
Freigeben: 2024-12-04 08:34:12
Original
548 Leute haben es durchsucht

Why Doesn't `fmt.Println()` Call My Stringer Method?

Warum meine Stringer-Schnittstellenmethode bei Verwendung von fmt.Println() nicht aufgerufen wird

Sie haben eine Methode String() definiert auf * Car, aber wenn Sie fmt.Println(myCar) verwenden, ist Ihr Objekt ein Wert und kein Zeiger. Dieses Verhalten ist darauf zurückzuführen, dass fmt.Println() das myCar-Objekt implizit in einen Wert vom Typ interface{} konvertiert und dann einen Typschalter verwendet, um zu bestimmen, wie es gedruckt wird.

Der Typschalter im fmt-Paket prüft für einen Fall vom Typ fmt.Stringer. Diese Prüfung schlägt jedoch fehl, da Car (und nicht *Car) die String()-Methode implementiert. Der manuelle Aufruf von String() funktioniert, da der Compiler myCar.String() automatisch in (&myCar).String() konvertiert und den erforderlichen Zeiger bereitstellt.

Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:

  • Implementieren Sie String() auf Car anstelle von *Car.
  • Übergeben Sie immer einen Zeiger auf fmt.Println():
fmt.Println(&myCar)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum ruft „fmt.Println()' meine Stringer-Methode nicht auf?. 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