Maison >développement back-end >Golang >Comment capturer des variables locales à l'aide de fermetures dans Goroutine ?
Dans Goroutine, les fermetures peuvent être utilisées pour capturer des variables locales afin qu'elles restent disponibles pendant l'exécution de Goroutine. En passant une variable locale comme argument à une fonction anonyme, vous pouvez capturer la variable au démarrage de la goroutine. En utilisant des fermetures, les données peuvent être partagées et modifiées entre des Goroutines exécutées simultanément tout en garantissant la sécurité des threads.
Comment utiliser les fermetures pour capturer des variables locales dans Goroutine
Une fermeture est une fonction qui peut accéder à des variables externes ou à des ressources qui existent déjà lors de sa création. Dans Go, les fermetures sont créées à l'aide de fonctions anonymes.
Capturer les variables locales
Lorsque nous démarrons une fonction anonyme dans Goroutine, la fonction peut capturer toutes les variables locales qui existent au démarrage de Goroutine.
Voici un exemple de code montrant comment capturer des variables locales :
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) }
Exemple pratique
Nous pouvons utiliser des fermetures pour créer un compteur qui s'exécute en parallèle. Chaque Goroutine possède son propre compteur privé, accessible et modifié simultanément en toute sécurité :
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) }
De cette façon, nous avons créé 10 Goroutines en parallèle, chaque Goroutine possède son propre compteur et effectue 1 million d'opérations d'auto-incrémentation simultanément. Nous obtenons le décompte total. Étant donné que chaque Goroutine capture sa propre variable de compteur local à l'aide d'une fermeture, l'accès simultané et la modification du compteur sont thread-safe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!