РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
699 of 1593 menu

Метод bufio.Reader.Peek

Метод bufio.Reader.Peek позволяет заглянуть в буфер и прочитать указанное количество байт n, не сдвигая указатель чтения. Это значит, что последующие вызовы методов чтения (например, Read или ReadString) увидят те же самые данные. Метод возвращает срез байт и ошибку. Если в буфере меньше n байт, метод вернет все доступные байты и ошибку ErrBufferFull. Если при попытке заполнить буфер возникнет ошибка, она также будет возвращена.

Синтаксис

peeked, err := reader.Peek(n)

Пример использования

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

package main import ( "bufio" "fmt" "strings" ) func main() { r := bufio.NewReader(strings.NewReader("0123456789")) peeked, err := r.Peek(5) if err != nil { fmt.Println("Error:", err) } fmt.Printf("peeked: %q\n", peeked) }

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

"peeked: \"01234\""

Пример с ошибкой ErrBufferFull

Если запросить больше байт, чем есть в буфере, метод вернет ошибку ErrBufferFull, но при этом вернет все доступные байты:

package main import ( "bufio" "fmt" "strings" ) func main() { r := bufio.NewReader(strings.NewReader("abc")) peeked, err := r.Peek(10) if err != nil { fmt.Println("Error:", err) } fmt.Printf("peeked: %q\n", peeked) }

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

"Error: bufio: buffer full" "peeked: \"abc\""

Пример подтверждения, что Peek не двигает указатель

Покажем, что после вызова Peek последующий вызов ReadString считывает те же данные с самого начала:

package main import ( "bufio" "fmt" "strings" ) func main() { r := bufio.NewReader(strings.NewReader("hello world")) peeked, _ := r.Peek(5) fmt.Printf("peeked: %q\n", peeked) line, _ := r.ReadString(' ') fmt.Printf("read: %q\n", line) }

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

"peeked: \"hello\"" "read: \"hello \""

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

  • метод bufio.Reader.Read,
    который читает данные в переданный срез
  • метод bufio.Reader.ReadString,
    который читает строку до разделителя
  • метод bufio.Reader.Discard,
    который пропускает указанное количество байт без чтения
  • метод bufio.Reader.Buffered,
    который возвращает количество байт в буфере
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить