Ce face bytes.Buffer.Next
buf.Next(n) returnează următorii n octeți necitiți (sau câți au mai rămas, dacă sunt mai puțini) și avansează citirea după ei. Este un mod simplu de a citi câmpuri de lungime fixă.
buf.Peek(n), nou în Go 1.26, returnează următorii n octeți fără să-i consume: următoarea citire începe tot de acolo. Dacă sunt mai puțin de n octeți, returnează ce există și io.EOF.
Ambele returnează un slice care împarte memoria cu bufferul și este valabil doar până la următoarea citire sau scriere. Copiază-l dacă vrei să-l păstrezi.
Parametri
| Parametru | Descriere |
|---|---|
n |
Numărul de octeți. |
Ce returnează
Next: slice-ul cu octeții. Peek: slice-ul și o eroare (io.EOF dacă nu erau destui octeți).
Exemple
Exemplul 1: Câmpuri de lungime fixă
package main
import (
"bytes"
"fmt"
)
func main() {
// cod județ (2), an (4), număr (3)
buf := bytes.NewBufferString("IS2026042")
judet := string(buf.Next(2))
an := string(buf.Next(4))
nr := string(buf.Next(3))
fmt.Println(judet, an, nr)
fmt.Printf("%q\n", buf.Next(10))
}
Rezultat
IS 2026 042
""
Exemplul 2: Peek: te uiți fără să citești
package main
import (
"bytes"
"fmt"
)
func main() {
buf := bytes.NewBufferString("GET /index.html")
inceput, _ := buf.Peek(3)
fmt.Printf("cerere: %s\n", inceput)
fmt.Println("bufferul e neschimbat:", buf.String())
prea, err := buf.Peek(100)
fmt.Println(len(prea), err)
}
Rezultat
cerere: GET
bufferul e neschimbat: GET /index.html
15 EOF
Greșeli frecvente
- Păstrezi slice-ul de la
NextsauPeekși apoi scrii în buffer: datele din slice se pot schimba. - Folosești
Peekpe o versiune de Go mai veche de 1.26: metoda nu există.
Comenzi înrudite
bytes.Buffer.Read: Citește din buffer octeți (Read, ReadByte) sau caractere (ReadRune); UnreadByte și UnreadRune pun înapoi ultima citire.bytes.Buffer.Reset: Reset golește bufferul și păstrează memoria pentru refolosire; Truncate păstrează doar primii n octeți necitiți.