Go 为什么返回实现错误接口的类型会自动调用error()方法?
链接: 我知道内置类型Go 为什么返回实现错误接口的类型会自动调用error()方法?,go,Go,链接: 我知道内置类型error如下所示 type error interface { Error() string } 意思是MyError实现error。 run()方法返回指向MyError类型的指针 但是方法签名中run()方法的返回类型是error类型 run()中的return语句如何自动调用Error()方法?此处fmt。Println()负责调用Error()方法而不是run() 引述自: fmt包通过调用其error()字符串格式化错误值 方法 错误实现的责任是总结
error
如下所示
type error interface {
Error() string
}
意思是MyError
实现error
。
run()
方法返回指向MyError
类型的指针
但是方法签名中run()
方法的返回类型是error
类型
run()
中的return语句如何自动调用Error()
方法?此处fmt。Println()
负责调用Error()
方法而不是run()
引述自:
fmt包通过调用其error()
字符串格式化错误值
方法
错误实现的责任是总结错误
上下文os.Open格式返回的错误为“Open/etc/passwd:
权限被拒绝,“而不仅仅是”权限被拒绝“。返回错误
根据我们的Sqrt,缺少有关无效参数的信息
因此,当您试图在main()
内部打印err
时,将调用其Error()
方法
将其替换为其他内容,那么您将不会在输出中看到它:此处fmt。Println()
负责调用Error()
方法notrun()
引述自:
fmt包通过调用其error()
字符串格式化错误值
方法
错误实现的责任是总结错误
上下文os.Open格式返回的错误为“Open/etc/passwd:
权限被拒绝,“而不仅仅是”权限被拒绝“。返回错误
根据我们的Sqrt,缺少有关无效参数的信息
因此,当您试图在main()
内部打印err
时,将调用其Error()
方法
将其替换为其他内容,然后您将不会在输出中看到它:对于记录,此修改版本证明调用
.Error()
的是fmt.Println(err)
语句。我使用fmt.Printf(“%#v”)
检查错误结构的内容,而不实际调用它的.error()
方法,并且我将时间戳的设置移动到.error()
方法本身,以便在调用.error()
时可以看到它的更改。具体来说,调用Error()的行在这里(在发表此评论时链接到主分支头):对于记录,此修改版本证明调用.Error()
的是fmt.Println(err)
语句。我使用fmt.Printf(“%#v”)
检查错误结构的内容,而不实际调用它的.error()
方法,并且我将时间戳的设置移动到.error()
方法本身,以便在调用.error()
时可以看到它的更改。具体来说,调用Error()的行位于此处(在发表此评论时链接到主分支负责人):
type error interface {
Error() string
}