Sobes.tech
Назад к вопросам
Senior
9

package main import ( "fmt" "sync" ) func main() { for i := 0; i < 5; i++ { go fmt.Println(i) } }

Компании, где спрашивали
X5 techX5 tech

Ответ от нейросети

sobes.tech AI

В данном коде запускается 5 горутин, каждая из которых выводит значение переменной i. Однако из-за того, что переменная i используется в замыкании и меняется в цикле, все горутины могут вывести одно и то же значение — обычно это будет 5, так как к моменту выполнения fmt.Println(i) цикл уже завершился.

Чтобы исправить это, нужно передавать текущее значение i в горутину как параметр, например:

for i := 0; i < 5; i++ {
	go func(n int) {
		fmt.Println(n)
	}(i)
}

Так каждая горутина получит свою копию значения i и выведет числа от 0 до 4.

Также стоит помнить, что в исходном коде программа может завершиться раньше, чем горутины успеют выполнить вывод, поэтому для демонстрации часто используют sync.WaitGroup или другой способ ожидания завершения горутин.