一尘不染

为什么在Error()方法内调用fmt.Sprint(e)会导致无限循环?

go

我正在通过“ A Go of Go”教程。

我想检查一下这个问题的答案:

注意:fmt.Sprint(e)Error方法内部的调用将使程序陷入无限循环。您可以通过e先转换来避免这种情况
fmt.Sprint(float64(e))。为什么?

我相信这是因为Sprint调用该函数时,由于错误为非nil,Error function()将再次调用the ,依此类推,从而导致无限循环。


阅读 741

收藏
2020-07-02

共1个答案

一尘不染

fmt.Sprint(e)将调用e.Error()将值转换estring。如果该Error()方法调用fmt.Sprint(e),则程序将递归直到内存不足。

您可以通过将转换为e不带Stringor Error方法的值来中断递归。

2020-07-02