Ce face bytes.Buffer.ReadString
buf.ReadString(delim) citește până la prima apariție a octetului delim și returnează tot ce a citit, inclusiv delimitatorul. Cu '\n' citești rând cu rând. Dacă delimitatorul nu mai apare, returnează restul datelor și eroarea io.EOF.
ReadBytes face același lucru, dar returnează un []byte nou (o copie).
Parametri
| Parametru | Descriere |
|---|---|
delim |
Octetul la care se oprește citirea, de exemplu '\n' sau ';'. |
Ce returnează
Datele citite (cu delimitator) și eroarea (io.EOF dacă delimitatorul nu a fost găsit).
Exemple
Exemplul 1: Citire rând cu rând
Ultimul rând nu se termină cu \n: vine împreună cu io.EOF, deci trebuie prelucrat înainte de a ieși din buclă.
package main
import (
"bytes"
"fmt"
"io"
"strings"
)
func main() {
buf := bytes.NewBufferString("Iași\nCluj\nBrașov")
for {
rand, err := buf.ReadString('\n')
if rand != "" {
fmt.Printf("%q -> %s\n", rand, strings.TrimSuffix(rand, "\n"))
}
if err == io.EOF {
break
}
}
}
Rezultat
"Iași\n" -> Iași
"Cluj\n" -> Cluj
"Brașov" -> Brașov
Exemplul 2: ReadBytes cu alt delimitator
package main
import (
"bytes"
"fmt"
)
func main() {
buf := bytes.NewBufferString("pâine;lapte;ouă")
primul, err := buf.ReadBytes(';')
fmt.Printf("%q %v\n", primul, err)
fmt.Printf("rămas: %q\n", buf.String())
}
Rezultat
"pâine;" <nil>
rămas: "lapte;ouă"
Greșeli frecvente
- Ieși din buclă imediat ce primești
io.EOF, fără să prelucrezi datele returnate în același apel: pierzi ultimul rând dacă nu se termină cu\n. - Uiți că delimitatorul face parte din rezultat și compari
rand == "Iași". Scoate-l custrings.TrimSuffixsauTrimSpace.
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: Un buffer de octeți care crește singur: scrii în el cu Write/WriteString/WriteByte/WriteRune și citești cu String() sau Bytes().strings.SplitSeq: Variantele iterator ale lui Split, SplitAfter, Fields și FieldsFunc, plus Lines: parcurgi bucățile cu for range, fără slice.