// Package mwc implements MultiWriteClosers. package mwc import "io" type mwc struct { wcs []io.WriteCloser } // Write implements the Writer interface. func (t *mwc) Write(p []byte) (int, error) { for _, w := range t.wcs { n, err := w.Write(p) if err != nil { return n, err } if n != len(p) { err = io.ErrShortWrite return n, err } } return len(p), nil } // Close implements the Closer interface. func (t *mwc) Close() error { for _, wc := range t.wcs { err := wc.Close() if err != nil { return err } } return nil } // MultiWriteCloser creates a WriteCloser that duplicates its writes to // all the provided writers, similar to the Unix tee(1) command. func MultiWriteCloser(wc ...io.WriteCloser) io.WriteCloser { wcs := make([]io.WriteCloser, len(wc)) copy(wcs, wc) return &mwc{wcs} }