Ich machte einige Bedingungsprüfung innerhalb der Goroutine basierend auf der sich wiederholenden Variable i
und festgestellt, dass es mir Ergebnisse gibt, die ich nicht erwartet hatte, und ich beschloss, es mit einigen einfachen zu bestätigen Code.Iterieren mit einer Goroutine gibt unerwartetes Ergebnis
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
Ist dieses erwartete Verhalten? Könnte jemand freundlicherweise erklären, warum 6 für 5 Mal gedruckt wird, obwohl ich nur bis 5 ??
Siehe auch die FAQ: https://golang.org/doc/faq#closures_and_goroutines – JimB
Vielleicht ein genaueres Duplikat: http://stackoverflow.com/questions/36776315/go-concurrency-with-for-loop- und-anonymous-function-verhält sich-unerwartet – JimB
Es ist nicht notwendig, dass Sie nur 6,6,6,6 erhalten. Erhöhe den Wert von i. Sie werden einen unterschiedlichen Wert erhalten. Sie erhalten den Wert von i zum Zeitpunkt der Ausführung der Goroutine. – khrm