刚开始学go语言,在最近学习go指南里遇到一个问题,貌似一个结构体,或者说被type语法定义的新类型,目前是结构体和基本类型的新名字,在实现error和Stringers接口之后,使用Println方法时调用会有优先级,想问问大佬们为什么会这样。
下面是代码
package main
import (
"fmt"
)
type MyError struct {
What string
}
func (e MyError) Error() string {
return "Error()"
}
func (e MyError) String() string{
return "String()"
}
func main() {
myerr:=MyError{"nothing"}
fmt.Println(myerr)
}
此时跑出来的结果是
如果我把上述代码中的Error()注释掉,结果则如下
是不是一个结构体实现了error接口就默认它是一个error了,所以优先调用了,请指教
有疑问加站长微信联系(非本文作者)

fmt调用的源码是这样的
虽然不全懂,但是大概知道了,go语言的swicth是匹配到一个之后就停止了,这里先匹配到error就先用了error,十分感谢