You can easily imagine
InvokeWithErrorLogger(fn, fnparam, log)
InvokeWithErrorAnnotator(fn, fnparam, annotatorFn)
result := InvokeWithErrorLogger( func (err error) { // Error handler incrementMetric("foo") log.Error("bar") }, addTwoNumbers, a, b, )
result, err := addTwoNumbers(a, b) if err != nil { incrementMetric("foo") log.Error("bar") return fmt.Errorf("addTwoNumbers(%d, %d) = %v", a, b, err) }