


Warum gibt mein Go-Parallelitätsbeispiel fünfmal „6' anstelle eindeutiger Zahlen aus?
Go-Parallelität mit for-Schleife und anonymer Funktionsanregung
Bei dem Bestreben, das Parallelitätsverständnis mithilfe von Gos sync.WaitGroup zu verbessern, stieß ein Entwickler auf eine unerwartetes Verhalten mit Code, der mehrere Uploads auf Amazon S3 ermöglichen soll. Die ersten Codeausschnitte werden angezeigt:
func main() { var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) go func() { fmt.Println(i) time.Sleep(time.Second * 1) wg.Done() }() } wg.Wait() }
Zur Überraschung des Entwicklers zeigte die Ausgabe durchweg „6, 6, 6, 6, 6“ an, abweichend von der erwarteten Reihenfolge, z. B. „2, 4, 1“. , 5, 3.“ Als die Schleife bis 5 iteriert, erschien das unerwartete Ergebnis 6. Nachfolgende Änderungen, die i als Argument in die anonyme Funktion einbezog, führten zur beabsichtigten Ausgabe.
Enthüllung der Begründung
Die Dokumentation für Abschlüsse in Go beleuchtet dieses Verhalten. Während die for-Schleife fortschreitet, erfassten die Abschlüsse den Wert von i zum Zeitpunkt ihrer Definition. Daher werden die Goroutinen mit einem gemeinsamen Wert von 6 ausgeführt, obwohl die Schleife endet, nachdem i 5 erreicht hat, und geben letztendlich „6, 6, 6, 6, 6“ aus.
Durch die Übergabe von i als Argument wird a Die neue Variable erfasst den Wert von i zum Zeitpunkt ihrer Deklaration, was zur gewünschten Ausgabe führt.
Das obige ist der detaillierte Inhalt vonWarum gibt mein Go-Parallelitätsbeispiel fünfmal „6' anstelle eindeutiger Zahlen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
