Почему вызов 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
.