Stellen Sie sich ein Dilemma vor: Sie definieren eine String()-Methode für eine Struktur, um benutzerdefinierte bereitzustellen Druckverhalten, aber fmt.Println scheint es zu ignorieren, sodass Sie eine unlesbare Ausgabe erhalten. Dies ist bei folgendem Code der Fall:
package main import ( "fmt" ) type bar struct { } func (b bar) String() string { return "bar" } type foo struct { b []*bar bb *bar } func main() { f := foo{b: []*bar{&bar{}}, bb: &bar{}} fmt.Println(f, f.b, f.bb) }
Erwartete Ausgabe:
{bar bar} [bar] bar
Tatsächliche Ausgabe:
{[0x176f44] 0x176f44} [bar] bar
Hier gibt es zwei Schlüsselfaktoren Verhalten:
Um dies zu beheben, müssen wir sowohl den Balkentyp als auch die Foo-Felder exportieren. Hier ist der korrigierte Code:
type Bar struct { } func (b Bar) String() string { return "bar" } type foo struct { B []Bar BB Bar } func main() { f := foo{B: []Bar{Bar{}}, BB: Bar{}} fmt.Println(f) }
Playground: https://play.golang.org/p/OhoIcB7cA3
Dadurch wird sichergestellt, dass sowohl Bar als auch seine String()-Methode exportiert werden fmt.Println, um es zu nutzen. Folglich erhalten wir die gewünschte Ausgabe:
{bar bar} [bar] bar
Denken Sie abschließend daran, sowohl die an der String()-Methode beteiligten Typen als auch Felder zu exportieren, damit fmt.Println diese leistungsstarke benutzerdefinierte Formatierungsfunktion nutzen kann.
Das obige ist der detaillierte Inhalt vonWarum verwendet „fmt.Println' nicht die „String()'-Methode von My Struct?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!