Golang,Go:隐式调用接口函数?
我有这个功能Golang,Go:隐式调用接口函数?,go,Go,我有这个功能 func (e *MyError) Error() string { return fmt.Sprintf("AT %v, %s", e.When, e.What) } 但是 正如您在下面看到的,我从来没有调用过它,但是为什么在最终输出中调用它呢 type MyError struct { When time.Time What string } func (e *MyError) Error() string { return fmt.S
func (e *MyError) Error() string {
return fmt.Sprintf("AT %v, %s", e.When, e.What)
}
但是
正如您在下面看到的,我从来没有调用过它,但是为什么在最终输出中调用它呢
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)
}
}
fmt.Println
和pkg/fmt
中的其他函数分析传递给它的对象。
如果是错误,函数将对传递的对象调用.error()
,并打印字符串
由Error()
返回
有关详细信息,请参阅。守则说:
switch v := p.field.(type) {
case error:
// ...
p.printField(v.Error(), verb, plus, false, depth)
return
// ...
}
传递对象的类型在类型开关语句中检查,如果是对象
实现,
v.Error()
用作值。fmt.Println
和pkg/fmt
中的其他函数分析传递给它的对象。
如果是错误,函数将对传递的对象调用.error()
,并打印字符串
由Error()
返回
有关详细信息,请参阅。守则说:
switch v := p.field.(type) {
case error:
// ...
p.printField(v.Error(), verb, plus, false, depth)
return
// ...
}
传递对象的类型在类型开关语句中检查,如果是对象
实现,v.Error()
用作值