Допустим, у меня есть эта функция:
func abc(i int) (e error) {
defer func() {
if r := recover(); r != nil {
abc(i * 2)
}
}()
if someCondition(i) {
return fmt.Errorf("Some Err");
}
return action() // returns err (nil in case of success) or panics
}
Будет ли это рассматриваться как рекурсивный вызов?Может ли он быть оптимизирован компилятором, так как хвостовые рекурсивные вызовы могут быть оптимизированы?
Я понимаю, что подавление паники таким способом не является хорошим решением, но предположим, что есть правильная функция condition()
, котораяявляется безопасным и правильно определяет, когда выйти.