Метод bufio.Reader.ReadLine
Метод bufio.Reader.ReadLine читает одну строку из буферизованного ввода.
В отличие от ReadString и ReadBytes, этот метод не возвращает
символ новой строки в конце строки. Метод возвращает три значения:
считанную строку в виде среза байт, булев флаг, указывающий, была ли строка
слишком длинной для внутреннего буфера, и ошибку. Если строка поместилась
в буфер целиком, флаг будет равен false.
Синтаксис
line, isPrefix, err := reader.ReadLine()
Пример
Давайте прочитаем первую строку из многострочного текста:
package 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)
}
Результат выполнения кода:
"Line: first line, isPrefix: false"
Пример
Давайте прочитаем все строки из текста в цикле:
package 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)
}
}
Результат выполнения кода:
"Read: line1 (prefix: false)"
"Read: line2 (prefix: false)"
"Read: line3 (prefix: false)"
Пример
Давайте обработаем случай, когда строка не помещается в буфер:
package 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)
}
Результат выполнения кода:
"Line part: very long , isPrefix: true"
Смотрите также
-
метод
bufio.Reader.ReadString,
который читает строку до заданного разделителя -
метод
bufio.Reader.ReadBytes,
который читает данные до разделителя в виде среза байт -
метод
bufio.Scanner.Scan,
который сканирует токены из входного потока -
функцию
bufio.NewReader,
которая создает новый буферизованный ридер