问题描述
我正在学习围棋之旅"教程.
我想看看这个问题的答案:
I would like to check the answer to this question:
注意:在 Error
方法中调用 fmt.Sprint(e)
将发送程序进入无限循环.您可以通过转换来避免这种情况e
首先:fmt.Sprint(float64(e))
.为什么?
我相信这是因为当 Sprint
函数被调用时,由于错误非零,Error function()
将再次被调用,依此类推,导致一个无限循环.
I believe this is because when the Sprint
function is called, since the error is non-nil, the Error function()
will again be called, and so forth, resulting in an infinite loop.
推荐答案
fmt.Sprint(e)
会调用 e.Error()
来转换值 e
到 string
.如果Error()
方法调用fmt.Sprint(e)
,那么程序会递归直到内存不足.
fmt.Sprint(e)
will call e.Error()
to convert the value e
to a string
. If the Error()
method calls fmt.Sprint(e)
, then the program recurses until out of memory.
您可以通过将 e
转换为没有 String
或 Error
方法的值来中断递归.
You can break the recursion by converting the e
to a value without a String
or Error
method.
这篇关于为什么在 Error() 方法中调用 fmt.Sprint(e) 会导致无限循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!