It’s possible to use custom types as
error
s by
implementing the
Error()
method on them. Here’s a
variant on the example above that uses a custom type
to explicitly represent an argument error.
packagemain
import("errors""fmt")
A custom error type usually has the suffix “Error”.
typeargErrorstruct{argintmessagestring}
Adding this
Error
method makes
argError
implement
the
error
interface.
return-1,&argError{arg,"can't work with it"}}returnarg+3,nil}
funcmain(){
errors.As
is a more advanced version of
errors.Is
.
It checks that a given error (or any error in its chain)
matches a specific error type and converts to a value
of that type, returning
true
. If there’s no match, it
returns
false
.
_,err:=f(42)varae*argErroriferrors.As(err,&ae){fmt.Println(ae.arg)fmt.Println(ae.message)}else{fmt.Println("err doesn't match argError")}}