package main
import (
"bytes"
"errors"
"fmt"
"io"
"log"
"golang.org/x/sync/errgroup"
)
func main() {
r := bytes.NewReader([]byte("hello world"))
pr1, pw1 := io.Pipe()
pr2, pw2 := io.Pipe()
eg := errgroup.Group{}
eg.Go(func() error {
return upload1(pr1)
})
eg.Go(func() error {
return upload2(pr2)
})
_, err := io.Copy(io.MultiWriter(pw1, pw2), r)
err = errors.Join(err, pw1.CloseWithError(err), pw2.CloseWithError(err))
if err != nil {
log.Fatal(err)
}
err = eg.Wait()
if err != nil {
log.Fatal(err)
}
}
func upload1(r io.Reader) error {
b, err := io.ReadAll(r)
if err != nil {
return err
}
fmt.Println(string(b))
return nil
}
func upload2(r io.Reader) error {
b, err := io.ReadAll(r)
if err != nil {
return err
}
fmt.Println(string(b))
return nil
}
Last active
August 17, 2023 16:20
-
-
Save dillonstreator/40f510e0d304bc81489bce105f4ec719 to your computer and use it in GitHub Desktop.
Golang one `io.Reader` into multiple `io.Reader` consumers
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment