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

时间:2017-03-13 17:40:34

标签: 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())

2 个答案:

答案 0 :(得分:3)

两个版本都完全正常。

fmt软件包对错误界面有特殊支持(从this link向下滚动几个屏幕):

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

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

一般来说,你应该更喜欢第一个版本,它更易读,特别是有更多的参数。

答案 1 :(得分:1)

如果from django.contrib.admin import AdminSite AdminSite.site_title = ugettext_lazy('My Admin') AdminSite.site_header = ugettext_lazy('My Administration') AdminSite.index_title = ugettext_lazy('DATA BASE ADMINISTRATION') 实现err接口,则在使用有效格式动词(如Error)时将隐式调用Error()方法。 fmt的文档有更多内容。