2 回答
TA贡献1862条经验 获得超7个赞
fmt.Sprint(e)
将调用e.Error()
将值转换e
为 a string
。如果Error()
方法调用fmt.Sprint(e)
,则程序将递归,直到内存不足。
您可以通过将 the 转换为e
没有String
orError
方法的值来中断递归。
TA贡献1757条经验 获得超8个赞
fmt.Sprint(e) 将从“fmt/print.go”调用以下代码
switch verb {
case 'v', 's', 'x', 'X', 'q':
// Is it an error or Stringer?
// The duplication in the bodies is necessary:
// setting handled and deferring catchPanic
// must happen before calling the method.
switch v := p.arg.(type) {
case error:
handled = true
defer p.catchPanic(p.arg, verb, "Error")
p.fmtString(v.Error(), verb)
return
case Stringer:
handled = true
defer p.catchPanic(p.arg, verb, "String")
p.fmtString(v.String(), verb)
return
}
}
当首先出现错误情况时,将执行 v.Error()。无限循环在这里!
- 2 回答
- 0 关注
- 350 浏览
添加回答
举报