Интерфейс error из пакета errors содержит один метод: Error() string. Любой тип с этим методом является ошибкой.
type MyError string
func (e MyError) Error() string {
return string(e)
}
return MyError("something went wrong")
type ValidationError struct {
Field string
Msg string
}
func (e *ValidationError) Error() string {
return e.Field + ": " + e.Msg
}
Такие типы можно возвращать как error, проверять через errors.As и оборачивать через fmt.Errorf("... %w", err).