3 simple ways to create an error
yourbasic.org/golang
String-based errors
The standard library offers two out-of-the-box options.
// simple string-based error
err1 := errors.New("math: square root of negative number")
// with formatting
err2 := fmt.Errorf("math: square root of negative number %g", x)
Custom errors with data
To define a custom error type, you must satisfy the predeclared error
interface.
type error interface {
Error() string
}
Here are two examples.
type SyntaxError struct {
Line int
Col int
}
func (e *SyntaxError) Error() string {
return fmt.Sprintf("%d:%d: syntax error", e.Line, e.Col)
}
type InternalError struct {
Path string
}
func (e *InternalError) Error() string {
return fmt.Sprintf("parse %v: internal error", e.Path)
}
If Foo
is a function that can return a SyntaxError
or an InternalError
, you may handle the two cases like this.
if err := Foo(); err != nil {
switch e := err.(type) {
case *SyntaxError:
// Do something interesting with e.Line and e.Col.
case *InternalError:
// Abort and file an issue.
default:
log.Println(e)
}
}
More code examples
Go blueprints: code for common tasks is a collection of handy code examples.