Heim >Backend-Entwicklung >Golang >Warum zeigt das Drucken eines „bytes.Buffer' in Go manchmal den String-Inhalt und manchmal seine interne Darstellung an?

Warum zeigt das Drucken eines „bytes.Buffer' in Go manchmal den String-Inhalt und manchmal seine interne Darstellung an?

DDD
DDDOriginal
2024-12-13 10:28:26168Durchsuche

Why does printing a `bytes.Buffer` in Go sometimes show the string content and sometimes show its internal representation?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn