Метод 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,
который возвращает количество байт в буфере