Skip to content

Instantly share code, notes, and snippets.

@kolo
Created January 12, 2017 11:20
Show Gist options
  • Save kolo/645b5a0418de5bc1482fb4caee5bcb7b to your computer and use it in GitHub Desktop.
Save kolo/645b5a0418de5bc1482fb4caee5bcb7b to your computer and use it in GitHub Desktop.
package main
import (
"errors"
"fmt"
)
type ErrorLogger interface {
Log(error) error
}
type logErrorFn func(error) error
func (f logErrorFn) Log(err error) error {
return f(err)
}
type Logger struct{}
func (l *Logger) Log(msg string) error {
fmt.Printf("%q\n", msg)
return nil
}
func wrapLogger(l *Logger) logErrorFn {
return func(err error) error {
return l.Log(fmt.Sprintf("err: %v", err))
}
}
func logErrors(err error, loggers []ErrorLogger) error {
for _, l := range loggers {
if lerr := l.Log(err); lerr != nil {
return lerr
}
}
return nil
}
func main() {
logErrors(errors.New("BOOM"), []ErrorLogger{wrapLogger(&Logger{})})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment