Функция io.MultiReader
Функция io.MultiReader создает составной ридер,
который последовательно читает данные из переданных
ридеров. Первым параметром функция принимает список
ридеров, которые нужно объединить. Возвращает она
новый ридер, который читает из первого ридера до
его конца, затем из второго и так далее.
Синтаксис
io.MultiReader(readers ...io.Reader) io.Reader
Пример
Давайте объединим два строковых ридера и прочитаем из них:
package main
import (
"io"
"strings"
"fmt"
)
func main() {
r1 := strings.NewReader("Hello, ")
r2 := strings.NewReader("World!")
mr := io.MultiReader(r1, r2)
data, err := io.ReadAll(mr)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(data))
}
Результат выполнения кода:
"Hello, World!"
Пример
Давайте объединим несколько байтовых ридеров и прочитаем из них:
package main
import (
"bytes"
"io"
"fmt"
)
func main() {
r1 := bytes.NewReader([]byte("abcde"))
r2 := bytes.NewReader([]byte("12345"))
r3 := bytes.NewReader([]byte("fghij"))
mr := io.MultiReader(r1, r2, r3)
data := make([]byte, 15)
n, err := mr.Read(data)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(data[:n]))
}
Результат выполнения кода:
"abcde12345fghij"
Пример
Давайте объединим ридеры и прочитаем их по частям:
package main
import (
"io"
"strings"
"fmt"
)
func main() {
r1 := strings.NewReader("abcde")
r2 := strings.NewReader("12345")
mr := io.MultiReader(r1, r2)
buf := make([]byte, 3)
for {
n, err := mr.Read(buf)
if err == io.EOF {
break
}
if err != nil {
fmt.Println(err)
return
}
fmt.Print(string(buf[:n]))
}
}
Результат выполнения кода:
"abcde12345"
Смотрите также
-
функцию
io.MultiWriter,
которая объединяет несколько писателей в один -
функцию
io.ReadAll,
которая читает все данные из ридера до конца -
функцию
io.LimitReader,
которая ограничивает количество читаемых данных -
функцию
io.TeeReader,
которая дублирует данные при чтении