Tracce
/
Go
Go
/
Programma
/
Stringer
St

Stringer in Go

1 esercizio

Informazioni su Stringer

Stringer è un'interfaccia per definire il formato stringa dei valori.

L'interfaccia consiste di un unico metodo String:

type Stringer interface {
    String() string
}

I tipi che vogliono implementare questa interfaccia devono avere un metodo String() che restituisce una rappresentazione a stringa del tipo, adatta a un essere umano. Il pacchetto fmt (e molti altri) cercherà questo metodo per formattare e stampare i valori.

Esempio: distanze

Supponiamo di lavorare a un'applicazione che gestisce distanze geografiche misurate in unità diverse. Abbiamo definito i tipi DistanceUnit e Distance come segue:

type DistanceUnit int

const (
	Kilometer    DistanceUnit = 0
	Mile         DistanceUnit = 1
)

type Distance struct {
	number float64
	unit   DistanceUnit
}

Nell'esempio qui sopra, Kilometer e Mile sono costanti di tipo DistanceUnit.

Questi tipi non implementano l'interfaccia Stringer, perché manca il metodo String. Di conseguenza le funzioni di fmt stamperanno i valori Distance usando il "formato predefinito" di Go:

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!

Per rendere l'output più informativo, implementiamo l'interfaccia Stringer per i tipi DistanceUnit e Distance aggiungendo a ciascun tipo un metodo String:

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

Le funzioni del pacchetto fmt chiameranno questi metodi quando formattano i valori Distance:

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

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

dist := Distance{
	number: 790.7,
	unit: Kilometer,
}
dist.String()
// => 790.7 km
Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Stringer