我正在浏览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,但我认为这不会影响这种情况吗?
或者我完全偏离了标记,还有其他事情发生在这里?
答案 0 :(得分:1)
无限循环案例仅适用于v
,s
,x
,X
和q
。
见这里:https://github.com/golang/go/blob/master/src/fmt/print.go#L581