【问题标题】:Go Tour Exercise: Errors: using Sprintf with %f to avoid infinite recursionGo Tour 练习:错误:使用带有 %f 的 Sprintf 来避免无限递归
【发布时间】:2017-04-17 11:43:23
【问题描述】:

我正在完成 Go 之旅,在错误练习中提到在错误函数中调用 Sprint(f) 会导致问题,即无限循环。这里解释了为什么会发生这种情况:Error, infinite loop

在我的第一个实现中,虽然我使用了带有 %f 动词的 Sprintf:

func (e ErrNegativeSqrt) Error() string {
    return fmt.Sprintf("cannot Sqrt negative number: %f", e)
}

这似乎避免了这个问题,我想知道这是否是因为 %f 动词期待一个浮点数,所以它强制它将 e 视为一个浮点数?旅游提到assignment requires explicit conversion,但我认为这不会影响这种情况?

或者我完全不合时宜并且这里发生了其他事情?

【问题讨论】:

标签: go


【解决方案1】:

这种无限循环情况仅适用于vsxXq

请看这里:https://github.com/golang/go/blob/6f51082da77a1d4cafd5b7af0db69293943f4066/src/fmt/print.go#L615

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2012-08-26
    • 2013-06-05
    • 1970-01-01
    • 2020-11-10
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多