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 mainimport ("fmt""strconv")type Celsius float64func (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.15f.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.