Почему вызов fmt.Sprint(e) внутри метода Error() приведет к бесконечному циклу?

Я прохожу учебник "Тур по Го".

Я хотел бы проверить ответ на этот вопрос:

Примечание: вызов метода fmt.Sprint(e) внутри метода Error отправит программа в бесконечный цикл. Вы можете избежать этого, преобразовав e сначала: fmt.Sprint(float64(e)). Почему?


Я полагаю, это потому, что когда вызывается функция Sprint, поскольку ошибка не равна нулю, снова будет вызван Error function() и т.д., Что приведет к бесконечному циклу.

Ответы

Ответ 1

fmt.Sprint(e) вызовет e.Error(), чтобы преобразовать значение e в string. Если метод Error() вызывает fmt.Sprint(e), тогда программа рекурсирует до тех пор, пока не будет сохранена память.

Вы можете разбить рекурсию, преобразов e в значение без метода string или Error.