err.Error() 应该用于字符串格式化吗?

Jac*_*ble 5 error-handling string-formatting go

这种字符串格式工作得很好:

err := foo()
if err != nil {
  fmt.Printf("foo returned '%s' when called\n", err)
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下打电话有什么好处吗err.Error()

fmt.Printf("foo returned '%s" when called\n", err.Error())
Run Code Online (Sandbox Code Playgroud)

nus*_*tin 5

两个版本都完全没问题。

fmt 包对错误界面有特殊支持(从此链接向下滚动几个屏幕):

  1. 如果操作数实现了错误接口,则将调用 Error 方法将对象转换为字符串,然后根据动词(如果有)要求对其进行格式化。

您的第二个版本可能会运行得更快,因为它可以避免 fmt 包所做的大多数特殊断言,但在大多数情况下差异应该不明显。

一般来说,您可能应该更喜欢第一个版本,它更具可读性,尤其是带有更多参数。