Back to questions
X5 tech
Senior
8
package main import ( "fmt" "sync" ) func main() { for i := 0; i < 5; i++ { go fmt.Println(i) } }
Companies where asked
Answer from AI
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 или другой способ ожидания завершения горутин.