Метод bufio.Scanner.Scan
Метод bufio.Scanner.Scan предназначен для пошагового чтения
входных данных, разделенных на токены (по умолчанию — строки).
Он возвращает true, если был успешно прочитан очередной токен,
и false в конце данных или при возникновении ошибки.
Метод не принимает параметров и работает совместно с методами
Text или Bytes для получения прочитанного токена.
Синтаксис
scanner.Scan()
Пример
Давайте создадим сканер для строки "abcde" и прочитаем все токены
(по умолчанию — строки). В качестве источника данных используем
strings.NewReader:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "abcde"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
token := scanner.Text()
fmt.Println(token)
}
}
Результат выполнения кода:
"abcde"
Пример
Теперь рассмотрим чтение нескольких строк. Сканер по умолчанию
разбивает данные по символу новой строки \n:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "line1\nline2\nline3"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
}
Результат выполнения кода:
"line1"
"line2"
"line3"
Пример
Обработаем случай, когда данные заканчиваются. Метод Scan
вернет false, и цикл завершится. Также можно проверить
ошибку с помощью метода Err:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "abc"
scanner := bufio.NewScanner(strings.NewReader(data))
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Println("Error:", err)
}
}
Результат выполнения кода:
"abc"
Смотрите также
-
метод
bufio.Scanner.Text,
который возвращает последний прочитанный токен в виде строки -
метод
bufio.Scanner.Bytes,
который возвращает последний прочитанный токен в виде среза байтов -
метод
bufio.Scanner.Split,
который задает функцию разбиения входных данных на токены -
метод
bufio.Scanner.Err,
который возвращает ошибку, возникшую при сканировании