Heim > Backend-Entwicklung > Golang > Wie kann ich Go-Strukturen mit ihren Feldnamen und String()-Methoden einfach drucken?

Wie kann ich Go-Strukturen mit ihren Feldnamen und String()-Methoden einfach drucken?

Barbara Streisand
Freigeben: 2024-12-06 15:58:11
Original
1005 Leute haben es durchsucht

How Can I Easily Print Go Structs with Their Field Names and String() Methods?

Drucken von Strukturen mit Feldstring()s

In diesem Code:

type A struct {
    t time.Time
}

func main() {
    a := A{time.Now()}
    fmt.Println(a)
    fmt.Println(a.t)
}
Nach dem Login kopieren

Beachten Sie, dass A String() nicht implementiert Methode, also druckt fmt.Println(a) seine native Darstellung. Das Aktualisieren von String() für jedes neue Feld in einer Struktur kann mühsam sein.

Leider ist dieses Verhalten dem fmt-Paket eigen. Allerdings kann eine Hilfsfunktion, die Reflektion verwendet, dieses Problem lösen:

func PrintStruct(s interface{}, names bool) string {
    v := reflect.ValueOf(s)
    t := v.Type()
    // To avoid panic if s is not a struct:
    if t.Kind() != reflect.Struct {
        return fmt.Sprint(s)
    }

    b := &bytes.Buffer{}
    b.WriteString("{")
    for i := 0; i < v.NumField(); i++ {
        if i > 0 {
            b.WriteString(" ")
        }
        v2 := v.Field(i)
        if names {
            b.WriteString(t.Field(i).Name)
            b.WriteString(":")
        }
        if v2.CanInterface() {
            if st, ok := v2.Interface().(fmt.Stringer); ok {
                b.WriteString(st.String())
                continue
            }
        }
        fmt.Fprint(b, v2)
    }
    b.WriteString("}")
    return b.String()
}
Nach dem Login kopieren

Diese Funktion verwendet Reflektion, um Strukturfelder zu durchlaufen und deren String()-Methoden aufzurufen, falls verfügbar.

Verwendung:

fmt.Println(PrintStruct(a, true))
Nach dem Login kopieren

Optional können Sie der aufrufenden Struktur eine String()-Methode hinzufügen PrintStruct():

func (a A) String() string {
    return PrintStruct(a, true)
}
Nach dem Login kopieren

Strukturfelder mit String() werden jetzt automatisch gedruckt.

Hinweise:

  • Exportieren alle privaten Felder, um sie für die Reflexion zugänglich zu machen.
  • Fügen Sie Feldnamen hinzu, um die Lesbarkeit zu verbessern (aber es ist optional).
  • Dieser Ansatz funktioniert auch, wenn der Wert keine Struktur ist, was ihn vielseitig macht.

Das obige ist der detaillierte Inhalt vonWie kann ich Go-Strukturen mit ihren Feldnamen und String()-Methoden einfach drucken?. 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