38 lines
		
	
	
		
			692 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			692 B
		
	
	
	
		
			Go
		
	
	
	
| 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
 | |
| }
 |