multi_readcloser.go 618 B

12345678910111213141516171819202122232425262728293031
  1. package wal
  2. import "io"
  3. type multiReadCloser struct {
  4. closers []io.Closer
  5. reader io.Reader
  6. }
  7. func (mc *multiReadCloser) Close() error {
  8. var err error
  9. for i := range mc.closers {
  10. err = mc.closers[i].Close()
  11. }
  12. return err
  13. }
  14. func (mc *multiReadCloser) Read(p []byte) (int, error) {
  15. return mc.reader.Read(p)
  16. }
  17. func MultiReadCloser(readClosers ...io.ReadCloser) io.ReadCloser {
  18. cs := make([]io.Closer, len(readClosers))
  19. rs := make([]io.Reader, len(readClosers))
  20. for i := range readClosers {
  21. cs[i] = readClosers[i]
  22. rs[i] = readClosers[i]
  23. }
  24. r := io.MultiReader(rs...)
  25. return &multiReadCloser{cs, r}
  26. }