Heim > Artikel > Backend-Entwicklung > Warum erzeugt das Drucken eines „bytes.Buffer' in Go unterschiedliche Ausgaben, je nachdem, ob ein Zeiger oder ein Wert verwendet wird?
Unterschiedliches Verhalten beim Drucken eines bytes.Buffer in Go
In Go beim Drucken eines bytes.Buffer mit fmt.Println(), Das Verhalten kann variieren, je nachdem, ob Sie einen Zeiger auf einen bytes.Buffer oder den Wert direkt verwenden. Hier ist eine Erklärung:
Im ersten Beispiel:
buf := new(bytes.Buffer) buf.WriteString("Hello world") fmt.Println(buf)
buf ist ein Zeiger auf einen bytes.Buffer, was bedeutet, dass eine String()-Methode verfügbar ist. Wenn Sie einen Zeiger auf fmt.Println() übergeben, wird automatisch die Methode String() aufgerufen, die den Inhalt des bytes.Buffer in einen String umwandelt. Aus diesem Grund wird „Hello World“ gedruckt.
Im zweiten Beispiel:
var buf bytes.Buffer buf.WriteString("Hello world") fmt.Println(buf)
buf ist ein Wert vom Typ bytes.Buffer, kein Zeiger. Daher ist die Methode String() für diesen Wert nicht verfügbar. Stattdessen druckt fmt.Println() ihn als regulären Strukturwert unter Verwendung des Standardformats {field0 field1 ...}. Die Felder hier sind die im Puffer gespeicherten Bytes, dargestellt als Teil von Ganzzahlen.
Sie können den Inhalt eines bytes.Buffer immer als Zeichenfolge drucken, unabhängig davon, ob Sie einen Zeiger oder einen Wert verwenden Rufen Sie vor dem Drucken explizit die String()-Methode auf:
fmt.Println(buf.String())
Dadurch wird in beiden Fällen ein konsistentes Verhalten sichergestellt.
Das obige ist der detaillierte Inhalt vonWarum erzeugt das Drucken eines „bytes.Buffer' in Go unterschiedliche Ausgaben, je nachdem, ob ein Zeiger oder ein Wert verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!