Тип bufio.Scanner
Тип bufio.Scanner представляет собой сканер для чтения данных
из ввода. Он автоматически разбивает входные данные на токены
(по умолчанию на строки) и предоставляет удобный интерфейс
для итерации. В первый параметр функция NewScanner
принимает источник данных (реализующий интерфейс io.Reader),
возвращает указатель на новый сканер.
Синтаксис
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
text := scanner.Text()
// обработка строки
}
if err := scanner.Err(); err != nil {
// обработка ошибки
}
Пример
Давайте прочитаем построчно строку из нескольких строк:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "строка 1\nстрока 2\nстрока 3"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
Результат выполнения кода:
"строка 1"
"строка 2"
"строка 3"
Пример
Давайте используем метод Bytes для получения сырых байтов:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "abcde\n12345"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
bytes := scanner.Bytes()
fmt.Printf("%q\n", bytes)
}
}
Результат выполнения кода:
"abcde"
"12345"
Пример
Давайте проверим ошибку после сканирования:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "hello\nworld"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Printf("ошибка: %v\n", err)
} else {
fmt.Println("сканирование завершено успешно")
}
}
Результат выполнения кода:
"hello"
"world"
"сканирование завершено успешно"
Смотрите также
-
метод
bufio.Scanner.Scan,
который выполняет чтение следующего токена -
метод
bufio.Scanner.Text,
который возвращает текущий токен как строку -
метод
bufio.Scanner.Bytes,
который возвращает текущий токен как срез байтов -
метод
bufio.Scanner.Err,
который возвращает ошибку сканирования