// Created on savesnippets.com ยท https://savesnippets.com/e3yJ7WvnG58ZAI package main import ( "errors" "fmt" ) type ValidationError struct { Field string Message string } func (e *ValidationError) Error() string { return fmt.Sprintf("invalid %s: %s", e.Field, e.Message) } func validate(name string) error { if name == "" { return &ValidationError{Field: "name", Message: "cannot be empty"} } if len(name) > 50 { return &ValidationError{Field: "name", Message: "too long"} } return nil } func main() { err := validate("") fmt.Println(err) // invalid name: cannot be empty var ve *ValidationError if errors.As(err, &ve) { fmt.Printf("field=%s reason=%s\n", ve.Field, ve.Message) } }