0Pricing
Go Academy · Lektion

Das Stringer-Interface

Die Darstellung von Typen anpassen

Das Stringer-Interface ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Standardmäßige Struct-Ausgabe

Standardmäßig zeigt die Ausgabe eines Structs mit %v seine unveränderten Felder. Das ist beim Debuggen in Ordnung, aber nicht immer gut lesbar.

package main

import "fmt"

type Color struct{ R, G, B int }

func main() {
    c := Color{255, 0, 0}
    fmt.Println(c)
}

Das Stringer-Interface

Das Interface fmt.Stringer hat eine Methode:

  • String() string

Jeder Typ, der diese Methode definiert, bestimmt damit, wie er bei der Ausgabe erscheint.

package main

import "fmt"

type Greeting struct{ Name string }

func (g Greeting) String() string {
    return "Hello, " + g.Name
}

func main() {
    fmt.Println(Greeting{"Ada"})
}

Automatisch verwendet

Wenn ein Typ über eine String()-Methode verfügt, rufen Println, Printf mit %v oder %s und verwandte Funktionen sie automatisch auf.

package main

import "fmt"

type Greeting struct{ Name string }

func (g Greeting) String() string {
    return "Hi " + g.Name
}

func main() {
    g := Greeting{"Bob"}
    fmt.Printf("%s and %v\n", g, g)
}

Formatierung innerhalb von String()

Bauen Sie das Ergebnis mit fmt.Sprintf auf, um eine übersichtliche, individuell angepasste Darstellung zu erzeugen.

package main

import "fmt"

type Color struct{ R, G, B int }

func (c Color) String() string {
    return fmt.Sprintf("rgb(%d, %d, %d)", c.R, c.G, c.B)
}

func main() {
    fmt.Println(Color{255, 128, 0})
}

Stringer bei benannten Typen

Stringer ist nicht nur für Structs gedacht. Jeder benannte Typ, selbst einer auf Basis von int, kann Stringer implementieren. Das ist das klassische Muster für Enums.

package main

import "fmt"

type Day int

func (d Day) String() string {
    names := []string{"Mon", "Tue", "Wed"}
    return names[d]
}

func main() {
    fmt.Println(Day(1))
}

Enums mit lesbarer Ausgabe

Kombinieren Sie iota mit Stringer, damit Konstanten als lesbare Namen statt als Zahlen ausgegeben werden.

package main

import "fmt"

type State int

const (
    Idle State = iota
    Running
    Done
)

func (s State) String() string {
    return []string{"Idle", "Running", "Done"}[s]
}

func main() {
    fmt.Println(Running)
}

Value- oder Pointer-Receiver

Wenn String() einen Value-Receiver verwendet, werden sowohl Werte als auch Pointer ansprechend ausgegeben. Bei einem Pointer-Receiver wird die Methode nur für Pointer verwendet.

package main

import "fmt"

type Tag struct{ Name string }

func (t Tag) String() string { return "#" + t.Name }

func main() {
    t := Tag{"go"}
    fmt.Println(t)
    fmt.Println(&t)
}

Endlose Rekursion vermeiden

Rufen Sie innerhalb der eigenen String()-Methode niemals fmt.Sprintf("%v", t) für denselben Typ auf. Dadurch wird String() immer wieder aufgerufen. Formatieren Sie stattdessen die Felder direkt.

package main

import "fmt"

type Money struct{ Cents int }

func (m Money) String() string {
    return fmt.Sprintf("$%.2f", float64(m.Cents)/100)
}

func main() {
    fmt.Println(Money{1050})
}

Stringer in Slices

Wenn Sie einen Slice mit Stringer-Werten ausgeben, wird jedes Element mit seiner String()-Methode formatiert.

package main

import "fmt"

type Tag struct{ Name string }

func (t Tag) String() string { return "#" + t.Name }

func main() {
    tags := []Tag{{"go"}, {"web"}}
    fmt.Println(tags)
}

Als Interface verwenden

Sie können jeden Stringer in einer fmt.Stringer-Variablen speichern und String() über das Interface aufrufen.

package main

import "fmt"

type City struct{ Name string }

func (c City) String() string { return "City of " + c.Name }

func main() {
    var s fmt.Stringer = City{"Oslo"}
    fmt.Println(s.String())
}

Warum das wichtig ist

Durch die Implementierung von Stringer erzeugen Ihre Typen überall dort eine übersichtliche Ausgabe, wo sie ausgegeben oder protokolliert werden – ohne zusätzlichen Formatierungscode an jeder Aufrufstelle.

package main

import "fmt"

type Temp float64

func (t Temp) String() string {
    return fmt.Sprintf("%.1f°C", float64(t))
}

func main() {
    fmt.Println(Temp(21.5))
}

Schnelltest

Welche Methode muss ein Typ definieren, um fmt.Stringer zu erfüllen?

Rückblick: Das Stringer-Interface

Sie haben gelernt, die Ausgabe anzupassen:

  • Implementieren Sie String() string, um fmt.Stringer zu erfüllen.
  • fmt ruft die Methode für %v und %s automatisch auf.
  • Das ist besonders für Enums geeignet; vermeiden Sie rekursives %v für denselben Typ.
package main

import "fmt"

type Level int

func (l Level) String() string {
    return []string{"low", "mid", "high"}[l]
}

func main() {
    fmt.Println(Level(2))
}

Häufig gestellte Fragen

Ist die Lektion „Das Stringer-Interface“ kostenlos?

Ja — der vollständige Text von „Das Stringer-Interface“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Das Stringer-Interface“?

Die Darstellung von Typen anpassen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Das Stringer-Interface“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Printf-Formatverben
  2. Sprintf und Fprintf
  3. Das Stringer-Interface
  4. Eingaben scannen
← Zurück zu Go Academy