반복 변수 i
을 기반으로 goroutine 내부의 상태를 검사하고 예상치 못한 결과를 얻었으며 몇 가지 간단한 방법으로이를 확인하기로 결정했습니다. 암호.goroutine을 사용하여 반복 할 때 예상치 못한 결과가 발생 함
for i := 1; i <= 5; i++ {
wg.Add(1)
fmt.Println(i)
go func() {
fmt.Println(i)
wg.Done()
}()
}
wg.Wait()
1
2
3
4
5
6
6
6
6
6
이 예상되는 동작입니까? 누군가가 친절하게 5 시까 지 6을 인쇄하는 이유를 설명 할 수 있습니까?
는 또한 자주 묻는 질문을 참조하십시오 https://golang.org/doc/faq#closures_and_goroutines을 – JimB
어쩌면 더 정확한 중복 : http://stackoverflow.com/questions/36776315/go-concurrency-with-for-loop- and-anonymous-function-behaves-unexpectedly – JimB
6,6,6,6 만받을 필요는 없습니다. i의 값을 늘리십시오. 당신은 다른 가치를 얻을 것이다. 당신은 goroutine의 실행 시점에 i의 가치를 얻고 있습니다. – khrm