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 faciResetș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.