0 Tage Serie
go / intermediate
Snippet

Anpassen der Formatausgabe mit dem fmt.Formatter-Interface

Durch die Implementierung des fmt.Formatter-Interfaces kann ein benutzerdefinierter Go-Typ genau festlegen, wie er über verschiedene Verben im fmt-Paket formatiert wird. Dies ermöglicht es Ihnen, während des normalen Druckens eine benutzerdefinierte Darstellungslogik, wie z. B. Einheitenumrechnungen, anzuwenden.

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
package main
import (
"fmt"
"strconv")
type Celsius float64
func (c Celsius) Format(f fmt.State, verb rune) {
switch verb {
case 'f':
f.Write([]byte(strconv.FormatFloat(float64(c), 'f', 2, 64) + " °C"))
case 'k':
kelvin := float64(c) + 273.15
f.Write([]byte(strconv.FormatFloat(kelvin, 'f', 2, 64) + " K"))
default:
f.Write([]byte(strconv.FormatFloat(float64(c), 'f', 2, 64)))
}
}
func main() {
temp := Celsius(21.5)
fmt.Printf("Celsius: %f, Kelvin: %k\n", temp, temp)
}
Erklärung
1
func (c Celsius) Format(f fmt.State, verb rune) {
Implementiert das fmt.Formatter-Interface für den benutzerdefinierten Typ Celsius.
2
f.Write([]byte(...))
Schreibt die formatierte Darstellung direkt in den Writer des States.
3
switch verb {
Überprüft das Formatierungs-Verb, um den Ausgabestil zu bestimmen.