Метод bufio.Reader.ReadLine

Метод bufio.Reader.ReadLine читает одну строку из буферизованного ввода. В отличие от ReadString и ReadBytes, этот метод не возвращает символ новой строки в конце строки. Метод возвращает три значения: считанную строку в виде среза байт, булев флаг, указывающий, была ли строка слишком длинной для внутреннего буфера, и ошибку. Если строка поместилась в буфер целиком, флаг будет равен false.

Синтаксис

goline, isPrefix, err := reader.ReadLine()

Пример

Давайте прочитаем первую строку из многострочного текста:

gopackage main

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

func main() {
  text := "first line\nsecond line\nthird line"
  reader := bufio.NewReader(strings.NewReader(text))

  line, isPrefix, err := reader.ReadLine()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("Line: %s, isPrefix: %t\n", line, isPrefix)
}

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

go"Line: first line, isPrefix: false"

Пример

Давайте прочитаем все строки из текста в цикле:

gopackage main

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

func main() {
  text := "line1\nline2\nline3"
  reader := bufio.NewReader(strings.NewReader(text))

  for {
    line, isPrefix, err := reader.ReadLine()
    if err != nil {
      break
    }
    fmt.Printf("Read: %s (prefix: %t)\n", line, isPrefix)
  }
}

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

go"Read: line1 (prefix: false)"
"Read: line2 (prefix: false)"
"Read: line3 (prefix: false)"

Пример

Давайте обработаем случай, когда строка не помещается в буфер:

gopackage main

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

func main() {
  // Создаем ридер с маленьким буфером (10 байт)
  longText := "very long string that exceeds buffer size"
  reader := bufio.NewReaderSize(strings.NewReader(longText), 10)

  line, isPrefix, err := reader.ReadLine()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("Line part: %s, isPrefix: %t\n", line, isPrefix)
}

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

go"Line part: very long , isPrefix: true"

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

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