Метод bufio.Reader.ReadString

Метод bufio.Reader.ReadString читает данные из буферизованного ридера до тех пор, пока не встретит указанный разделитель, и возвращает прочитанные данные в виде строки, включая сам разделитель. Метод принимает один параметр delim - байт, который служит разделителем. Если разделитель не найден до конца потока, метод возвращает все доступные данные и ошибку io.EOF. Метод полезен для построчного чтения данных из файлов, сетевых соединений или других потоков ввода.

Синтаксис

gostr, err := reader.ReadString(delim)

Пример

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

gopackage main

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

func main() {
  input := "Hello, World!\nThis is a test"
  reader := bufio.NewReader(strings.NewReader(input))

  res, err := reader.ReadString('\n')
  if err != nil {
    fmt.Printf("error: %v", err)
  }
  fmt.Println(res)
}

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

go"Hello, World!\n"

Пример

Давайте прочитаем строку до разделителя-запятой:

gopackage main

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

func main() {
  input := "apple,banana,cherry"
  reader := bufio.NewReader(strings.NewReader(input))

  res, err := reader.ReadString(',')
  if err != nil {
    fmt.Printf("error: %v", err)
  }
  fmt.Println(res)
}

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

go"apple,"

Пример

Прочитаем все данные из потока до конца, когда разделитель отсутствует:

gopackage main

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

func main() {
  input := "no delimiter here"
  reader := bufio.NewReader(strings.NewReader(input))

  res, err := reader.ReadString('.')
  if err != nil {
    fmt.Printf("error: %v\n", err)
  }
  fmt.Println(res)
}

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

go"no delimiter here"

Пример

Прочитаем все строки из многострочного текста в цикле:

gopackage main

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

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

  for {
    res, err := reader.ReadString('\n')
    if err != nil {
      break
    }
    fmt.Print(res)
  }
}

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

go"line1\n"
"line2\n"
"line3\n"

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

  • метод bufio.Reader.ReadBytes,
    который возвращает прочитанные данные в виде среза байт
  • метод bufio.Reader.ReadLine,
    который предоставляет низкоуровневое построчное чтение
  • метод bufio.Reader.ReadByte,
    который читает и возвращает один байт
  • метод bufio.Reader.ReadRune,
    который читает один рунический символ