Complex custom error types that carry additional context can of course also be
easily defined. In go an error is any type that implements Error() string.
When you ask goerr to print a stack trace it will attempt to marshal the
error chain's "cause" into JSON, revealing even more contextual information.
You should notice in this example there are 3 pieces of information.