Tracks
/
Go
Go
/
Lehrplan
/
Stringers
St

Stringers in Go

1 Übung

Über Stringers

Stringer ist ein Interface zur Definition des String-Formats von Werten.

Das Interface besteht aus einer einzigen Methode String:

type Stringer interface {
    String() string
}

Typen, die dieses Interface implementieren wollen, müssen eine String()-Methode haben, die eine für Menschen lesbare String-Darstellung des Typs zurückgibt. Das Paket fmt (und viele andere) sucht nach dieser Methode, um Werte zu formatieren und auszugeben.

Beispiel: Entfernungen

Angenommen, wir arbeiten an einer Anwendung, die mit geografischen Entfernungen in verschiedenen Einheiten umgeht. Wir haben die Typen DistanceUnit und Distance wie folgt definiert:

type DistanceUnit int

const (
	Kilometer    DistanceUnit = 0
	Mile         DistanceUnit = 1
)

type Distance struct {
	number float64
	unit   DistanceUnit
}

Im obigen Beispiel sind Kilometer und Mile Konstanten vom Typ DistanceUnit.

Diese Typen implementieren das Interface Stringer nicht, weil ihnen die Methode String fehlt. Deshalb geben die fmt-Funktionen Distance-Werte im „Standardformat“ von Go aus:

mileUnit := Mile
fmt.Sprint(mileUnit)
// => 1
// The result is '1' because that is the underlying value of the 'Mile' constant (see constant declarations above)

dist := Distance{number: 790.7, unit: Kilometer}
fmt.Sprint(dist)
// => {790.7 0}
// not a very useful output!

Um die Ausgabe aussagekräftiger zu machen, implementieren wir das Interface Stringer für die Typen DistanceUnit und Distance, indem wir jedem Typ eine Methode String hinzufügen:

func (sc DistanceUnit) String() string {
	units := []string{"km", "mi"}
	return units[sc]
}

func (d Distance) String() string {
	return fmt.Sprintf("%v %v", d.number, d.unit)
}

Die Funktionen des fmt-Pakets rufen diese Methoden auf, wenn sie Distance-Werte formatieren:

kmUnit := Kilometer
kmUnit.String()
// => km

mileUnit := Mile
mileUnit.String()
// => mi

dist := Distance{
	number: 790.7,
	unit: Kilometer,
}
dist.String()
// => 790.7 km
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne Stringers