Unterschiedliches Verhalten von Puffern für gedruckte Bytes in Go
In Go kann das Drucken eines bytes.Buffer-Werts zu unterschiedlichen Ausgaben führen, je nachdem, ob es sich um einen handelt Zeiger oder ein regulärer Wert.
Beim Erstellen eines bytes.Buffer mit new(bytes.Buffer) erhalten wir ein Zeiger auf einen Puffer. Wenn Sie auf die String()-Methode des Werts zugreifen und diese drucken, wird der Inhalt des Puffers ausgegeben: Hello World.
Durch die Verwendung von var buf bytes.Buffer wird jedoch direkt ein Wert vom Typ bytes.Buffer erstellt. Für diesen Wert gibt es keine String()-Methode, daher wird sein Standardformat ausgegeben. Dies führt zu der ausführlichen Ausgabe: {[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}.
Dieser Unterschied entsteht, weil Go beim Drucken nach einer String()-Methode sucht Werte. Wenn es vorhanden ist, wird die Methode aufgerufen, um die Darstellung des Werts zu erhalten. Für Zeigerwerte wie *bytes.Buffer ist die String()-Methode verfügbar, für reguläre Werte wie bytes.Buffer jedoch nicht.
Im Gegensatz zu Zeigern haben reguläre Werte ein anderes Standardformat beim Drucken: {field0 field1 ...}, wobei ihre Felder angezeigt werden. Dies erklärt die unterschiedlichen Ausgaben, die beim Drucken von bytes.Buffer-Werten beobachtet werden, je nachdem, ob es sich um Zeiger oder reguläre Werte handelt.
Das obige ist der detaillierte Inhalt vonWarum führt das Drucken eines „bytes.Buffer' in Go zu unterschiedlichen Ergebnissen, je nachdem, ob es sich um einen Zeiger oder einen Wert handelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!