> В какой версии Go был исправлен баг с указателями в цикле (Go)
Уровень: middle · Роль: backend · Категория: Технические вопросы
Компании: Т-Банк
Стек: Go
> Пример ответа
Баг с захватом переменной цикла (loop variable capture) - когда указатель или замыкание ссылались на одну и ту же переменную, а не на её копию на каждой итерации - был исправлен в Go 1.22 (выпущен в феврале 2024 года). Начиная с этой версии, переменные, объявленные в for-цикле, создаются заново для каждой итерации, что устраняет классическую ошибку вида:
GOvar ptrs []*intfor 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 соответственно. Для обратной совместимости старый код продолжает работать, но компилятор больше не генерирует предупреждения, а поведение стало интуитивно понятным.
> Похожие задачи по backend
Как отследить и исправить deadlock в Go при работе с каналами и горутинами
Как архитектурно передавать на фронт сложную структуру с вложенными полями и массивами
Как контролировать уникальные указатели и умножать их ровно один раз в функции double в Go
Есть ли у вас сильно нагруженные части системы
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью