Ce face bufio.Reader.ReadRune
ReadRune citește următorul caracter UTF-8 și îl returnează ca rune, împreună cu numărul de octeți pe care îl ocupă (1 pentru a, 2 pentru ș, 3 pentru €). La final returnează io.EOF.
Dacă octeții nu formează un caracter UTF-8 valid, returnează unicode.ReplacementChar (U+FFFD) și size = 1. UnreadRune pune înapoi ultimul caracter citit, util la analizatoare de text.
Ce returnează
Caracterul, dimensiunea lui în octeți și eroarea (io.EOF la final).
Exemple
Exemplul 1: Caractere și octeți
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("aș€"))
for {
c, n, err := r.ReadRune()
if err != nil {
break
}
fmt.Printf("%q: %d octeți, cod %U\n", c, n, c)
}
}
Rezultat
'a': 1 octeți, cod U+0061
'ș': 2 octeți, cod U+0219
'€': 3 octeți, cod U+20AC
Exemplul 2: Numărarea vocalelor de la tastatură
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
r := bufio.NewReader(os.Stdin)
vocale, litere := 0, 0
for {
c, _, err := r.ReadRune()
if err != nil || c == '\n' {
break
}
if strings.ContainsRune("aăâeiîouAĂÂEIÎOU", c) {
vocale++
}
if c != ' ' {
litere++
}
}
fmt.Printf("%d vocale din %d litere\n", vocale, litere)
}
Ce scrie utilizatorul (intrare)
Învățăm Go în Iași
Rezultat
8 vocale din 15 litere
Greșeli frecvente
- Citești câte un octet (
ReadByte) dintr-un text cu diacritice. Literele cașse rup în două valori fără sens.
Comenzi înrudite
bufio.NewReader: Învelește un io.Reader într-un bufio.Reader, care citește pe blocuri și oferă ReadString, ReadRune, ReadLine.bufio.Writer.WriteString: WriteString adaugă un text în buffer; WriteRune adaugă un singur caracter Unicode, codat UTF-8.bufio.Reader.ReadString: Citește până la (și inclusiv) caracterul delimitator; ReadString dă un string, ReadBytes un []byte.