Go 是否应在字符串格式中使用err.Error()?

Go 是否应在字符串格式中使用err.Error()?,go,error-handling,string-formatting,Go,Error Handling,String Formatting,此字符串格式工作正常: err := foo() if err != nil { fmt.Printf("foo returned '%s' when called\n", err) } 在这种情况下调用err.Error()有什么好处吗 fmt.Printf("foo returned '%s" when called\n", err.Error()) 如果err实现了Error接口,则在使用有效的格式谓词(如%s)时,会隐式调用Error()方法。的文档对此有更多说明。两个版本都很好

此字符串格式工作正常:

err := foo()
if err != nil {
  fmt.Printf("foo returned '%s' when called\n", err)
}
在这种情况下调用
err.Error()
有什么好处吗

fmt.Printf("foo returned '%s" when called\n", err.Error())

如果
err
实现了
Error
接口,则在使用有效的格式谓词(如
%s
)时,会隐式调用Error()方法。的文档对此有更多说明。

两个版本都很好

fmt包特别支持错误界面(从以下位置向下滚动两个屏幕):

  • 如果操作数实现错误接口,将调用error方法将对象转换为字符串,然后按照谓词(如果有)的要求格式化字符串
  • 您的第二个版本可能会运行得更快,因为它可以避免fmt包所做的大多数特殊断言,但在大多数情况下,差异不应该很明显

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