Heim >Backend-Entwicklung >Golang >Warum kann „bytes.Buffer' „io.Writer' in Go nicht implementieren und wie kann das Problem behoben werden?

Warum kann „bytes.Buffer' „io.Writer' in Go nicht implementieren und wie kann das Problem behoben werden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-09 13:57:121052Durchsuche

Why Does `bytes.Buffer` Fail to Implement `io.Writer` in Go, and How Can It Be Fixed?

Implementieren von io.Writer für Objekte zum Schreiben von Zeichenfolgen

In Go müssen wir häufig Objekte erstellen, die die io.Writer-Schnittstelle implementieren Erledigung von Schreibvorgängen. Beim Versuch, bytes.Buffer zu verwenden, kann es jedoch trotz der Implementierung der Write-Methode zu Verwirrung kommen.

Fehlererklärung

Die Fehlermeldung „bytes.Buffer tut „io.Writer nicht implementieren“ tritt auf, weil bytes.Buffer einen Zeigerempfänger für seine Write-Methode hat:

func (b *Buffer) Write(p []byte) (n int, err error)

Das bedeutet dass die Methode für einen Zeiger auf den Puffer aufgerufen werden muss, nicht für den Puffer selbst. Der Versuch, den Puffer direkt zu übergeben, wie im Codeausschnitt unten gezeigt, verursacht den Fehler.

var b bytes.Buffer
foo := bufio.NewWriter(b)

Lösung: Übergabe eines Zeigers an den Puffer

Zur Lösung Um diesen Fehler zu beheben, müssen wir einen Zeiger auf den Puffer statt auf den Puffer selbst übergeben. Dies liegt daran, dass bufio.NewWriter eine io.Writer-Schnittstelle erwartet und der Zeiger auf den Puffer diese Schnittstelle korrekt implementiert.

var b bytes.Buffer
foo := bufio.NewWriter(&b) // Pass a pointer to the buffer

Mit dieser Änderung erstellt das Programm erfolgreich einen Writer, der in den String-Puffer schreibt .

Das obige ist der detaillierte Inhalt vonWarum kann „bytes.Buffer' „io.Writer' in Go nicht implementieren und wie kann das Problem behoben werden?. 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