我正在完成 Go 之旅,在错误练习中提到,在 Error 函数中调用 Sprint(f) 将导致一个问题,即无限循环。此处解释了为什么会发生这种情况:Error, infinite loop
在我的第一个实现中,我使用了带有 %f 动词的 Sprintf:
func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number: %f", e)
}
这似乎避免了这个问题,我想知道这是否是因为 %f 动词期待一个 float ,所以它强制它将 e 视为 float ?游览中提到assignment requires explicit conversion ,但是我认为这不会影响这种情况?
或者我完全偏离了目标,这里发生了其他事情?
最佳答案
该无限循环情况仅适用于 v
、s
、x
、X
和 q
.
请参见此处:https://github.com/golang/go/blob/6f51082da77a1d4cafd5b7af0db69293943f4066/src/fmt/print.go#L615
关于游览练习: Errors: using Sprintf with %f to avoid infinite recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43450813/