本文介绍了为什么在 Error() 方法中调用 fmt.Sprint(e) 会导致无限循环?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习围棋之旅"教程.

我想看看这个问题的答案:

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() 来转换值 estring.如果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 转换为没有 StringError 方法的值来中断递归.

You can break the recursion by converting the e to a value without a String or Error method.

这篇关于为什么在 Error() 方法中调用 fmt.Sprint(e) 会导致无限循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 07:51