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:
fmt.Println(&myCar)
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!