type Processor interface { Process(buf []byte) (message string, err error) } type ErrorHandler interface { Handle(err error) } func RegularError(buf []byte, processor Processor, handler ErrorHandler) (message string, err error) { message, err = processor.Process(buf) if err != nil { handler.Handle(err) return "", err } return }