Unterschiedliches Verhalten beim Drucken eines bytes.Buffer in Go
Bei Verwendung des Typs bytes.Buffer können Benutzer beim Drucken von Objekten auf ein unterschiedliches Verhalten stoßen dieser Art. Der folgende Code:
buf := new(bytes.Buffer) buf.WriteString("Hello world") fmt.Println(buf)
gibt „Hello World“ aus, während dieser Code:
var buf bytes.Buffer buf.WriteString("Hello world") fmt.Println(buf)
das Folgende ausgibt:
{[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 0}
Diese scheinbare Diskrepanz entsteht, weil der Existenz einer String()-Methode für den Typ bytes.Buffer. Beim Drucken eines Werts vom Typ bytes.Buffer wird die String()-Methode aufgerufen, um die String-Darstellung des Werts zu erstellen. Beim Drucken eines Werts vom Typ bytes.Buffer ist jedoch keine solche Methode verfügbar und es wird das Standardformat für eine Struktur verwendet, was zu der oben gezeigten Darstellung führt.
Das unterschiedliche Verhalten wird durch die weiter veranschaulicht Folgendes:
type MyBuffer bytes.Buffer func (b *MyBuffer) String() string { return "MyBuffer with " + b.String() } var b MyBuffer b.WriteString("Hello world") fmt.Println(b)
In diesem Fall wird beim Drucken eines MyBuffer-Werts die benutzerdefinierte String()-Methode aufgerufen und das Präfix „MyBuffer with ...“ zur Ausgabe hinzugefügt, um dies zu demonstrieren die Auswirkung der Implementierung der String()-Methode.
Das Verständnis dieses Verhaltens ist bei der Arbeit mit dem Typ bytes.Buffer in Go von entscheidender Bedeutung, da es sich auf die Formatierung der Ausgabe auswirkt und bei unsachgemäßer Handhabung zu unerwarteten Ergebnissen führen kann.
Das obige ist der detaillierte Inhalt vonWarum zeigt das Drucken eines „bytes.Buffer' in Go manchmal den String-Inhalt und manchmal seine interne Darstellung an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!