Метод bufio.Reader.Discard
Метод bufio.Reader.Discard пропускает указанное количество байт из буферизованного потока чтения. Он полезен, когда нужно пропустить ненужные данные, не читая их в память. Метод принимает один параметр - количество байт, которое нужно пропустить, и возвращает количество реально пропущенных байт и возможную ошибку.
Синтаксис
n, err := reader.Discard(n int) (int, error)
Пример
Давайте создадим буферизованный ридер и пропустим первые 5 байт из строки:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := "Hello, World!"
reader := bufio.NewReader(strings.NewReader(s))
n, err := reader.Discard(5)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Пропущено байт: %d\n", n)
rest, _ := reader.ReadString('\n')
fmt.Printf(rest)
}
Результат выполнения кода:
"Пропущено байт: 5"
", World!"
Пример
Давайте попробуем пропустить больше байт, чем содержится в потоке, и посмотрим на ошибку:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := "abcde"
reader := bufio.NewReader(strings.NewReader(s))
n, err := reader.Discard(10)
if err != nil {
fmt.Printf("Ошибка: %v\n", err)
fmt.Printf("Пропущено байт: %d\n", n)
return
}
fmt.Printf("Пропущено байт: %d\n", n)
}
Результат выполнения кода:
"Ошибка: EOF"
"Пропущено байт: 5"
Пример
Метод Discard часто используется для пропуска заголовков или метаданных в потоке данных:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
data := "HEADER: metadata\nbody content"
reader := bufio.NewReader(strings.NewReader(data))
// Пропускаем все символы до первой новой строки
line, _ := reader.ReadString('\n')
fmt.Printf("Заголовок: %s", line)
// Пропускаем следующий байт (перевод строки)
reader.Discard(1)
// Читаем тело
body, _ := reader.ReadString('\n')
fmt.Printf(body)
}
Результат выполнения кода:
"Заголовок: HEADER: metadata"
"body content"
Смотрите также
-
метод
bufio.Reader.Read,
который читает данные в буфер -
метод
bufio.Reader.Peek,
который возвращает следующие байты без их потребления -
метод
bufio.Reader.ReadByte,
который читает один байт из потока -
метод
bufio.Reader.Buffered,
который возвращает количество доступных байт в буфере