package errchan import ( "fmt" "strings" ) type ErrChan struct { C chan error } // New returns an error channel of max length 'n' // errors can be sent to the ErrChan.C channel, and will be returned when // ErrChan.Error() is called. func New(n int) *ErrChan { return &ErrChan{ C: make(chan error, n), } } // Error closes the ErrChan.C channel and returns an error if there are any // non-nil errors, otherwise returns nil. func (e *ErrChan) Error() error { close(e.C) var out string for err := range e.C { if err != nil { out += "[" + err.Error() + "], " } } if out != "" { return fmt.Errorf("Errors encountered: " + strings.TrimRight(out, ", ")) } return nil }