【发布时间】: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,但我认为这不会影响这种情况?
或者我完全不合时宜并且这里发生了其他事情?
【问题讨论】:
-
Sprintf不返回字符串,因此不受问题影响? -
Sprint 也返回一个字符串
-
是的,没错。我的错。
-
在出现相同问题时查看这些问题+答案示例,类型转换解决了它(解释在答案中):Call json.Unmarshal inside UnmarshalJSON function without causing stack overflow;和The difference between t and *t。
标签: go