🔴 Сложный · 3 очк. Горутины и конкурентность
Что выведет в Go 1.22+: for i := 0; i < 3; i++ { go func() { fmt.Print(i) }() }; time.Sleep(time.Second)?
A 333
B Всегда 012
C 0, 1, 2 в произвольном порядке
D Ошибка компиляции
Объяснение вопроса

С Go 1.22 переменная цикла i создаётся заново на каждой итерации, поэтому каждая горутина захватывает свою копию. Выведены будут три цифры из набора 0, 1, 2 (порядок не гарантирован - зависит от планировщика).

До Go 1.22

Все горутины захватывали одну и ту же переменную i по ссылке; к моменту выполнения цикл уже заканчивался, и чаще всего печаталось "333".

Порядок вывода

Порядок 0, 1, 2 не гарантирован - горутины выполняются конкурентно. Может быть, например, 1 0 2 или 2 1 0.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.