bytes.Buffer.Reset în Go

Reset golește bufferul și păstrează memoria pentru refolosire; Truncate păstrează doar primii n octeți necitiți.

Sintaxă
func (b *Buffer) Reset()
func (b *Buffer) Truncate(n int)

Ce face bytes.Buffer.Reset

buf.Reset() golește bufferul, dar păstrează memoria deja alocată, deci scrierile următoare nu mai alocă. Este echivalent cu buf.Truncate(0). Așa poți refolosi același buffer într-o buclă.

buf.Truncate(n) păstrează doar primii n octeți necitiți și îi aruncă pe ceilalți. Este util ca să renunți la ultima bucată scrisă, de exemplu o virgulă în plus. Un n negativ sau mai mare decât Len() produce panic.

Parametri

Parametru Descriere
n La Truncate: câți octeți necitiți se păstrează.

Ce returnează

Nimic.

Exemple

Exemplul 1: Refolosirea bufferului cu Reset

package main

import (
	"bytes"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	for _, oras := range []string{"Iași", "Cluj"} {
		buf.Reset()
		fmt.Fprintf(&buf, "Bun venit în %s!", oras)
		fmt.Println(buf.String(), "| capacitate:", buf.Cap())
	}
}

Rezultat

Bun venit în Iași! | capacitate: 64
Bun venit în Cluj! | capacitate: 64

Exemplul 2: Truncate: scoaterea separatorului de la final

package main

import (
	"bytes"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	for _, n := range []string{"Ana", "Ion", "Maria"} {
		buf.WriteString(n)
		buf.WriteString(", ")
	}
	buf.Truncate(buf.Len() - 2)
	fmt.Printf("%q\n", buf.String())
}

Rezultat

"Ana, Ion, Maria"

Greșeli frecvente

  • Păstrezi un slice obținut cu Bytes() și apoi faci Reset și scrii din nou: memoria este refolosită, iar slice-ul vechi primește datele noi.

Comenzi înrudite

  • bytes.Buffer: Un buffer de octeți care crește singur: scrii în el cu Write/WriteString/WriteByte/WriteRune și citești cu String() sau Bytes().
  • bytes.Buffer.Len: Len dă octeții necitiți, Cap capacitatea, Grow rezervă loc, Available spațiul liber, iar AvailableBuffer un slice pentru scriere directă.
  • strings.Builder.Grow: Grow rezervă loc dinainte, Len dă octeții scriși, Cap capacitatea bufferului, iar Reset golește Builder-ul.