Go Tour练习:错误:使用带有%f的Sprintf来避免无限递归

时间:2017-04-17 11:43:24

标签: go

我正在浏览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,但我认为这不会影响这种情况吗?

或者我完全偏离了标记,还有其他事情发生在这里?

1 个答案:

答案 0 :(得分:1)

无限循环案例仅适用于vsxXq

见这里:https://github.com/golang/go/blob/master/src/fmt/print.go#L581