Ce face bytes.Buffer.Len
buf.Len() returnează numărul de octeți necitiți (scade pe măsură ce citești). buf.Cap() returnează capacitatea memoriei rezervate. buf.Available() spune câți octeți mai încap fără o nouă alocare.
buf.Grow(n) se asigură că mai încap cel puțin n octeți fără realocare; apelat o dată la început, evită realocările repetate.
buf.AvailableBuffer() returnează un slice gol, cu capacitatea egală cu spațiul liber. Îl folosești cu funcțiile Append* (de exemplu strconv.AppendInt) și apoi îl dai imediat lui buf.Write: numărul se scrie direct în memoria bufferului, fără text intermediar.
Parametri
| Parametru | Descriere |
|---|---|
n |
La Grow: câți octeți trebuie să mai încapă (negativ produce panic). |
Ce returnează
Len, Cap, Available: numere de octeți. AvailableBuffer: un []byte de lungime 0. Grow nu returnează nimic.
Exemple
Exemplul 1: Len scade la citire
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
buf.Grow(64)
fmt.Println("Len:", buf.Len(), "Cap >= 64:", buf.Cap() >= 64)
buf.WriteString("Brașov")
fmt.Println("după scriere, Len:", buf.Len(), "Available + Len == Cap:", buf.Available()+buf.Len() == buf.Cap())
buf.Next(3)
fmt.Println("după Next(3), Len:", buf.Len(), "rămas:", buf.String())
}
Rezultat
Len: 0 Cap >= 64: true
după scriere, Len: 7 Available + Len == Cap: true
după Next(3), Len: 4 rămas: șov
Exemplul 2: AvailableBuffer cu strconv.AppendInt
package main
import (
"bytes"
"fmt"
"strconv"
)
func main() {
var buf bytes.Buffer
for _, nota := range []int64{10, 9, 7} {
b := buf.AvailableBuffer()
b = strconv.AppendInt(b, nota, 10)
b = append(b, ' ')
buf.Write(b)
}
fmt.Printf("%q\n", buf.String())
}
Rezultat
"10 9 7 "
Greșeli frecvente
- Folosești
Len()ca total scris. După citiri,Lenarată doar ce a rămas necitit. - Păstrezi slice-ul de la
AvailableBufferdupăWrite. Este valabil doar până la următoarea scriere.
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.Reset: Reset golește bufferul și păstrează memoria pentru refolosire; Truncate păstrează doar primii n octeți necitiți.strings.Builder.Grow: Grow rezervă loc dinainte, Len dă octeții scriși, Cap capacitatea bufferului, iar Reset golește Builder-ul.strconv.AppendInt: Adaugă un număr sau un bool, scris ca text, la sfârșitul unui []byte, fără să creeze un text intermediar.