mirror of
https://github.com/MedUnes/go-kata.git
synced 2026-07-28 10:40:14 +07:00
39 lines
713 B
Go
39 lines
713 B
Go
package myerror
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type MyError struct {
|
|
Op string
|
|
}
|
|
|
|
func (e *MyError) Error() string {
|
|
if e == nil {
|
|
return "<nil MyError>"
|
|
}
|
|
return fmt.Sprintf("operation failed: %s", e.Op)
|
|
}
|
|
|
|
// BuggyDoThing returns a *MyError(nil) as error (typed nil pitfall)
|
|
func BuggyDoThing(fail bool) error {
|
|
if fail {
|
|
return &MyError{Op: "fail"}
|
|
}
|
|
var e *MyError = nil
|
|
return e // BAD: interface is non-nil!
|
|
}
|
|
|
|
// FixedDoThing returns a true nil error when no error
|
|
func FixedDoThing(fail bool) error {
|
|
if fail {
|
|
return &MyError{Op: "fail"}
|
|
}
|
|
return nil // GOOD: interface is nil
|
|
}
|
|
|
|
// Wraps error for errors.As demonstration
|
|
func WrapError(err error) error {
|
|
return fmt.Errorf("wrapped: %w", err)
|
|
}
|