Что произойдет при переполнении стека горутины

«Что произойдет при переполнении стека горутины» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При переполнении стека горутины Go автоматически увеличивает его размер. По умолчанию стек начинается с 2 КБ и динамически растет (или уменьшается) по мере необходимости.

Если системе не хватает памяти для расширения стека, программа завершится с ошибкой fatal error: stack overflow.

Пример:

func infiniteRecursion() {
    infiniteRecursion()
}

func main() {
    infiniteRecursion() // приведет к stack overflow
}

Особенности:

  • В отличие от некоторых языков, в Go стек горутины не фиксированного размера
  • Каждое новое выделение стека примерно в 2 раза больше предыдущего
  • Минимальный размер стека - 2KB, максимальный зависит от системы