> В какой версии Go был исправлен баг с указателями в цикле (Go)

Уровень: middle · Роль: backend · Категория: Технические вопросы

Компании: Т-Банк

Стек: Go

> Пример ответа

Баг с захватом переменной цикла (loop variable capture) - когда указатель или замыкание ссылались на одну и ту же переменную, а не на её копию на каждой итерации - был исправлен в Go 1.22 (выпущен в феврале 2024 года). Начиная с этой версии, переменные, объявленные в for-цикле, создаются заново для каждой итерации, что устраняет классическую ошибку вида:

GO
var ptrs []*int
for i := 0; i < 3; i++ {
ptrs = append(ptrs, &i) // до Go 1.22 все указатели ссылались на одно и то же i
}

В Go 1.22 и новее i пересоздаётся на каждом шаге, поэтому *ptrs[0], *ptrs[1], *ptrs[2] будут равны 0, 1, 2 соответственно. Для обратной совместимости старый код продолжает работать, но компилятор больше не генерирует предупреждения, а поведение стало интуитивно понятным.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью