Dieser Code:
%Vor%druckt:
%Vor% A
implementiert String()
nicht, also ist es kein fmt.Stringer
und gibt seine native Darstellung aus. Es ist jedoch sehr mühsam, String()
für jede einzelne Struktur zu implementieren, die ich drucken möchte. Schlimmer noch, ich muss die String()
s aktualisieren, wenn ich einige Felder hinzufüge oder entferne. Gibt es eine einfachere Möglichkeit, eine Struktur mit ihren Feldern ' String()
s' zu drucken?
So ist das fmt
-Paket implementiert, Sie können das also nicht ändern.
Sie können jedoch eine Hilfsfunktion schreiben, die reflection ( reflect
-Paket) verwendet, um über die Felder einer Struktur zu iterieren , und kann die Methode String()
für die Felder aufrufen, wenn sie über eine solche Methode verfügen.
Beispielimplementierung:
%Vor% Wenn Sie nun struct
drucken möchten, können Sie Folgendes tun:
Sie können auch eine String()
-Methode zu Ihrer Struktur hinzufügen, die nur unsere Funktion PrintStruct()
aufrufen muss:
Immer wenn Sie Ihre Struktur ändern, müssen Sie nichts mit Ihrer String()
-Methode machen, da sie Reflektion verwendet, um dynamisch über alle Felder zu gehen.
Hinweise:
Da wir Reflektion verwenden, müssen Sie das Feld t time.Time
exportieren, damit dies funktioniert (außerdem wurden zu Testzwecken einige zusätzliche Felder hinzugefügt):
Testen Sie es:
%Vor%Ausgabe (Probieren Sie es auf dem Gehe Spielplatz aus):
%Vor%