go / intermediate
Snippet
Eigene String-Formatierung mit fmt.Formatter anpassen
Das fmt.Formatter-Interface in Go ermöglicht es Entwicklern, die Formatierung von Typen bei der Verwendung von fmt.Printf anzupassen. Durch die Implementierung der Methode Format(f fmt.State, verb rune) kann das Verb (wie '%c' oder '%f') überprüft und benutzerdefinierte Darstellungen direkt in den Writer-Status geschrieben werden.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package mainimport ("fmt""strconv")type Temperature float64func (t Temperature) Format(f fmt.State, verb rune) {switch verb {case 'c':f.Write([]byte(strconv.FormatFloat(float64(t), 'f', 1, 64) + "°C"))case 'f':fah := float64(t)*9/5 + 32f.Write([]byte(strconv.FormatFloat(fah, 'f', 1, 64) + "°F"))default:f.Write([]byte(strconv.FormatFloat(float64(t), 'f', 2, 64)))}}func main() {temp := Temperature(25.0)fmt.Printf("Celsius: %c\n", temp)fmt.Printf("Fahrenheit: %f\n", temp)}
Erklärung
1
type Temperature float64
Definiert einen benutzerdefinierten Gleitkommatyp für Temperaturen.
2
func (t Temperature) Format(f fmt.State, verb rune)
Implementiert das fmt.Formatter-Interface für den Typ Temperature.
3
switch verb {
Wertet das im Printf-Aufruf übergebene Formatierungszeichen aus.
4
f.Write([]byte(strconv.FormatFloat(float64(t), 'f', 1, 64) + "°C"))
Schreibt die formatierten String-Bytes direkt in das Ziel-State-Objekt.