func IOError(r io.Reader, buf []byte, processor Processor, handler ErrorHandler) (message string, err error) { n, err := r.Read(buf) // First check for available data. if n > 0 { message, err = processor.Process(buf[0:n]) // Regular error handling. if err != nil { handler.Handle(err) return "", err } } // Then handle any error. if err != nil { handler.Handle(err) return "", err } return }