Метод bufio.Scanner.Scan

Метод bufio.Scanner.Scan предназначен для пошагового чтения входных данных, разделенных на токены (по умолчанию — строки). Он возвращает true, если был успешно прочитан очередной токен, и false в конце данных или при возникновении ошибки. Метод не принимает параметров и работает совместно с методами Text или Bytes для получения прочитанного токена.

Синтаксис

goscanner.Scan()

Пример

Давайте создадим сканер для строки "abcde" и прочитаем все токены (по умолчанию — строки). В качестве источника данных используем strings.NewReader:

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  data := "abcde"
  scanner := bufio.NewScanner(strings.NewReader(data))

  for scanner.Scan() {
    token := scanner.Text()
    fmt.Println(token)
  }
}

Результат выполнения кода:

go"abcde"

Пример

Теперь рассмотрим чтение нескольких строк. Сканер по умолчанию разбивает данные по символу новой строки \n:

gopackage 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)
  }
}

Результат выполнения кода:

go"line1"
"line2"
"line3"

Пример

Обработаем случай, когда данные заканчиваются. Метод Scan вернет false, и цикл завершится. Также можно проверить ошибку с помощью метода Err:

gopackage 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)
  }
}

Результат выполнения кода:

go"abc"

Смотрите также

  • метод bufio.Scanner.Text,
    который возвращает последний прочитанный токен в виде строки
  • метод bufio.Scanner.Bytes,
    который возвращает последний прочитанный токен в виде среза байтов
  • метод bufio.Scanner.Split,
    который задает функцию разбиения входных данных на токены
  • метод bufio.Scanner.Err,
    который возвращает ошибку, возникшую при сканировании