Link: https://play.golang.org/p/z50pUnAe4q
package main
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
func (e *MyError) Error() string {
return fmt.Sprintf("at %v, %s",
e.When, e.What)
}
func run() error {
return &MyError{
time.Now(),
"it didn't work",
}
}
func main() {
if err := run(); err != nil {
fmt.Println(err)
}
}
I understand that the built in type error looks like this,
type error interface {
Error() string
}
Meaning MyError implements error.
The run() method returns a pointer to MyError type.
But the return type of run() method in the method signature is of type error.
How does the return statement in run() automatically call the Error() method?