Heim >Backend-Entwicklung >Golang >Wie erfasst man lokale Variablen mithilfe von Abschlüssen in Goroutine?
In Goroutine können Schließungen verwendet werden, um lokale Variablen zu erfassen, sodass sie während der Goroutine-Ausführung verfügbar bleiben. Indem Sie eine lokale Variable als Argument an eine anonyme Funktion übergeben, können Sie die Variable beim Start der Goroutine erfassen. Durch die Verwendung von Abschlüssen können Daten zwischen gleichzeitig ausgeführten Goroutinen gemeinsam genutzt und geändert werden, während gleichzeitig die Thread-Sicherheit gewährleistet wird.
So verwenden Sie Abschlüsse zum Erfassen lokaler Variablen in Goroutine
Ein Abschluss ist eine Funktion, die auf externe Variablen oder Ressourcen zugreifen kann, die bei ihrer Erstellung bereits vorhanden sind. In Go werden Abschlüsse mithilfe anonymer Funktionen erstellt.
Lokale Variablen erfassen
Wenn wir eine anonyme Funktion in Goroutine starten, kann die Funktion alle lokalen Variablen erfassen, die beim Start von Goroutine vorhanden sind.
Hier ist ein Codebeispiel für die Erfassung lokaler Variablen:
package main import ( "fmt" "time" ) func main() { i := 0 for i < 10 { go func(i int) { fmt.Println(i) }(i) i++ } time.Sleep(time.Second) }
Praktisches Beispiel
Wir können Schließungen verwenden, um einen Zähler zu erstellen, der parallel ausgeführt wird. Jede Goroutine verfügt über einen eigenen privaten Zähler, auf den sicher zugegriffen und gleichzeitig geändert werden kann:
package main import ( "fmt" "sync" "sync/atomic" "time" ) func main() { var wg sync.WaitGroup var counter uint64 for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() for j := 0; j < 1000000; j++ { // 使用原子操作确保并发安全 atomic.AddUint64(&counter, 1) } fmt.Println("Goroutine", i, "finished") }(i) } wg.Wait() fmt.Println("Total count:", counter) }
Auf diese Weise haben wir 10 Goroutinen parallel erstellt, jede Goroutine hat ihren eigenen Zähler und führt 1 Million automatische Inkrementierungsvorgänge gleichzeitig durch. Wir erhalten die Gesamtzahl. Da jede Goroutine ihre eigene lokale Zählervariable mithilfe eines Abschlusses erfasst, ist der gleichzeitige Zugriff und die Änderung des Zählers threadsicher.
Das obige ist der detaillierte Inhalt vonWie erfasst man lokale Variablen mithilfe von Abschlüssen in Goroutine?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!