Функция bufio.NewScanner

Функция bufio.NewScanner создает новый объект Scanner, который используется для построчного чтения данных из входного потока (например, из файла, стандартного ввода или сетевого соединения). В качестве параметра функция принимает интерфейс io.Reader, из которого будут считываться данные. Возвращаемое значение - указатель на структуру Scanner, предоставляющую методы для итеративного чтения данных.

Синтаксис

gobufio.NewScanner(r io.Reader) *bufio.Scanner

Пример

Давайте создадим сканер для чтения строк из стандартного ввода:

gopackage main

import (
  "bufio"
  "fmt"
  "os"
)

func main() {
  scanner := bufio.NewScanner(os.Stdin)
  fmt.Print("Enter text: ")
  scanner.Scan()
  text := scanner.Text()
  fmt.Printf("You entered: %s\n", text)
}

Результат выполнения кода при вводе строки "hello world":

go"Enter text: hello world"
"You entered: hello world"

Пример

Давайте прочитаем все строки из файла с помощью сканера:

gopackage main

import (
  "bufio"
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("example.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  scanner := bufio.NewScanner(file)
  for scanner.Scan() {
    line := scanner.Text()
    fmt.Println(line)
  }

  if err := scanner.Err(); err != nil {
    fmt.Println("Error reading file:", err)
  }
}

Результат выполнения кода для файла с тремя строками:

go"first line"
"second line"
"third line"

Пример

Давайте разобьем строку на слова с помощью кастомной функции разбиения:

gopackage main

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

func main() {
  data := "one two three four five"
  scanner := bufio.NewScanner(strings.NewReader(data))
  scanner.Split(bufio.ScanWords)

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

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

go"one"
"two"
"three"
"four"
"five"

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

  • функцию bufio.NewReader,
    которая создает буферизированный ридер для чтения данных
  • функцию bufio.NewWriter,
    которая создает буферизированный райтер для записи данных
  • функцию bufio.Scanner.Scan,
    которая выполняет чтение следующего токена
  • функцию bufio.Scanner.Text,
    которая возвращает строковое представление прочитанного токена