Extendable typed error handling for Go, with tags and optional stack frames.
go get github.com/bronlabs/errs-go/errspackage main
import (
"fmt"
"github.com/bronlabs/errs-go/errs"
)
var ValidationErr = errs.New("validation failed")
func main() {
err := ValidationErr.
WithTag("field", "email").
WithMessage("missing @")
fmt.Printf("%s", err)
}var (
IOErr = errs.New("io error")
UnsupportedErr = errs.New("unsupported operation")
)
func load() error {
return IOErr.
WithTag("path", "/tmp/input.txt").
WithStackFrame()
}
func parse() error {
return errs.Wrap(load()).
WithMessage("parse error")
}
func main() {
err := errs.Join(parse(), UnsupportedErr)
if v, ok := errs.HasTag(err, "path"); ok {
fmt.Println("path:", v)
}
}The Must, Must1, and Must2 helpers are intended for setup and tests where
failing fast is acceptable, such as parsing configuration, loading fixtures, or
wiring dependencies. They let you keep call sites compact while still surfacing
unexpected errors immediately.
value := errs.Must1(os.ReadFile("config.json"))errs.Is and errs.As are aliases for errors.Is and errors.As, so you can
use the standard library patterns across error chains produced by this library.