func (mrc *MultiReadCloser) Read(p []byte) (n int, err error) {
	return mrc.mr.Read(p)
}
Read reads from the next available reader.
package internal
import (
	"fmt"
	"io"
	"os"
	"regexp"
	"strconv"
	"syscall"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
)
type ReadCloser struct {
	r io.Reader
	c io.Closer
}
func NewReadCloser(r io.Reader, c io.Closer) *ReadCloser {
	return &ReadCloser{r, c}
}
func (r *ReadCloser) Read(p []byte) (n int, err error) {
	return r.r.Read(p)
}
func (r *ReadCloser) Close() error {
	if rc, ok := r.r.(io.Closer); ok {
		if err := rc.Close(); err != nil {
			r.c.Close()
			return err
		}
	}
	return r.c.Close()
}
type MultiReadCloser struct {
	mr      io.Reader
	closers []io.Closer
}
func NewMultiReadCloser(a []io.ReadCloser) *MultiReadCloser {
	readers := make([]io.Reader, len(a))
	closers := make([]io.Closer, len(a))
	for i, rc := range a {
		readers[i] = rc
		closers[i] = rc
	}
	return &MultiReadCloser{mr: io.MultiReader(readers...), closers: closers}
}