Что выведет: for i := 0; i < 3; i++ { go func() { fmt.Println(i) }() }?

Middle
199 просмотров
AFK Offer AI

Скорее всего 3, 3, 3 (до Go 1.22). Closure захватывает переменную i по ссылке, а не по значению. К моменту выполнения горутин цикл уже завершился и i == 3. Фикс: go func(i int) { fmt.Println(i) }(i) или с Go 1.22 loopvar fix — каждая итерация создаёт новую переменную. Классический gotcha на собесах.

Следующий вопрос

Что такое path/filepath?