Функция io.ReadAtLeast
Функция io.ReadAtLeast читает данные из переданного ей ридера и заполняет переданный срез байт, пытаясь прочитать как минимум указанное минимальное количество байт. Первым параметром функция принимает ридер (объект, реализующий интерфейс io.Reader), вторым — срез байт для чтения данных, третьим — минимальное количество байт, которое необходимо прочитать. Функция возвращает два значения: количество фактически прочитанных байт и ошибку. Если ридер вернул ошибку до того, как было прочитано минимальное количество байт, функция возвращает ошибку io.ErrUnexpectedEOF. Если ридер вернул ошибку io.EOF до достижения минимального порога, возвращается io.ErrUnexpectedEOF, а не io.EOF.
Синтаксис
func ReadAtLeast(r io.Reader, buf []byte, min int) (n int, err error)
Пример
Давайте прочитаем из строкового ридера не менее 5 байт:
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("1234567890")
buf := make([]byte, 10)
n, err := io.ReadAtLeast(r, buf, 5)
if err != nil {
fmt.Println("Error:", err)
return
}
res := string(buf[:n])
fmt.Println(res)
}
Результат выполнения кода:
"12345"
Пример
Попробуем прочитать из ридера не менее 15 байт, но в ридере всего 10 байт:
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("1234567890")
buf := make([]byte, 20)
n, err := io.ReadAtLeast(r, buf, 15)
if err != nil {
fmt.Println("Error:", err)
fmt.Println("Read bytes:", n)
return
}
res := string(buf[:n])
fmt.Println(res)
}
Результат выполнения кода:
"Error: unexpected EOF"
"Read bytes: 10"
Пример
Прочитаем ровно столько байт, сколько есть в ридере, используя переданный буфер:
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("abcde")
buf := make([]byte, 10)
n, err := io.ReadAtLeast(r, buf, 5)
if err != nil {
fmt.Println("Error:", err)
return
}
res := string(buf[:n])
fmt.Println(res)
}
Результат выполнения кода:
"abcde"
Смотрите также
-
функцию
io.ReadAll,
которая читает все данные из ридера до EOF -
функцию
io.ReadFull,
которая читает ровно указанное количество байт -
функцию
io.Copy,
которая копирует данные из ридера в писатель -
функцию
io.LimitReader,
которая ограничивает чтение до указанного количества байт