func test() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println(i)
}()
}
wg.Wait()
}
위의 함수를 실행시키면 0, 1, 2, 3, 4 가 출력될 것 같지만 사실 그렇게 출력되지 않는다. 그 이유는 다음과 같다.
fmt.Println(i)
라인이 호출될 때의 i는 모두가 공유하는 그 변수 i 인 것이다. func test() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println(i)
}(i)
}
wg.Wait()
}
func test() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
i := i
go func() {
defer wg.Done()
fmt.Println(i)
}()
}
wg.Wait()
}