Kurzusok
/
Go
Go
/
Tanterv
/
Stringerek
St

Stringerek ebben a kurzusban: Go

1 feladat

A(z) Stringerek fogalomról

A Stringer egy interfész, amellyel meghatározhatod az értékek string formátumát.

Az interfész egyetlen String metódusból áll:

type Stringer interface {
    String() string
}

Azoknak a típusoknak, amelyek meg akarják valósítani ezt az interfészt, rendelkezniük kell egy String() metódussal, amely a típus emberbarát string-reprezentációját adja vissza. A fmt csomag (és még sok más is) ezt a metódust keresi, amikor értékeket formáz és ír ki.

Példa: távolságok

Tegyük fel, hogy egy olyan alkalmazáson dolgozunk, amely különböző mértékegységekben mért földrajzi távolságokkal foglalkozik. A DistanceUnit és a Distance típust a következőképpen definiáltuk:

type DistanceUnit int

const (
	Kilometer    DistanceUnit = 0
	Mile         DistanceUnit = 1
)

type Distance struct {
	number float64
	unit   DistanceUnit
}

A fenti példában a Kilometer és a Mile a DistanceUnit típus konstansai.

Ezek a típusok nem valósítják meg a Stringer interfészt, mert hiányzik belőlük a String metódus. Ezért a fmt függvényei a Go „alapértelmezett formátumával” írják ki a Distance értékeket:

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!

Hogy a kimenet több információt adjon, megvalósítjuk a Stringer interfészt a DistanceUnit és a Distance típuson úgy, hogy mindkét típushoz hozzáadunk egy String metódust:

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)
}

A fmt csomag függvényei ezeket a metódusokat hívják meg, amikor Distance értékeket formáznak:

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

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

dist := Distance{
	number: 790.7,
	unit: Kilometer,
}
dist.String()
// => 790.7 km
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Stringerek fogalmat