Apprenez à utiliser Golang pour la programmation simultanée Select Channels Go
Introduction :
Dans le domaine du développement logiciel actuel, la programmation simultanée est devenue une compétence essentielle. Lors du traitement de grandes quantités de données et d'un nombre élevé de requêtes simultanées, l'optimisation des performances est devenue un défi auquel sont confrontés tous les développeurs. En tant que langage mettant l'accent sur la programmation simultanée, Golang a réalisé une bonne conception et une bonne mise en œuvre à cet égard.
Introduction :
La programmation simultanée de Golang repose principalement sur Channels et Select. Les canaux sont des canaux utilisés pour transmettre des données entre les coroutines Go, et Select est utilisé pour gérer les opérations de lecture et d'écriture simultanées de plusieurs canaux. En combinant Channels et Select, nous pouvons facilement mettre en œuvre une programmation simultanée asynchrone et efficace.
Concepts de base :
Avant de commencer à utiliser Channels et Select, comprenons brièvement leurs concepts de base.
Channel est un type spécial utilisé pour transférer des données entre les coroutines Go. Un canal peut être compris comme une file d'attente premier entré, premier sorti (FIFO), et les données circulent d'une coroutine Go à une autre coroutine Go.
Pour créer un Channel, vous pouvez utiliser la fonction make(), comme indiqué ci-dessous :
ch := make(chan data type)
Parmi eux, le type de données représente le type de données transmis dans le Channel.
L'utilisation de Channel pour envoyer et recevoir des données peut utiliser respectivement l'opérateur <- et le mot-clé.
ch <- data // signifie envoyer des données au canal
data = <- ch // signifie recevoir des données du canal et les affecter à des variables de données
Select est une méthode de concurrence utilisée pour gérer plusieurs instructions de canaux pour la lecture et opérations d'écriture. C'est similaire à l'instruction switch, mais pour les canaux.
Utilisez Select pour surveiller les opérations d'envoi et de réception sur plusieurs canaux en même temps. Une fois qu'un canal est prêt, sa branche correspondante sera exécutée.
Exemple de code :
Ensuite, montrons comment utiliser Select et Channels pour la programmation simultanée via un exemple de code.
package main
import (
"fmt" "time"
)
func main() {
ch1 := make(chan string) // 创建一个字符串类型的Channel ch2 := make(chan string) go func() { time.Sleep(2 * time.Second) ch1 <- "Hello" // 向ch1发送数据 }() go func() { time.Sleep(1 * time.Second) ch2 <- "World" // 向ch2发送数据 }() // 使用Select监听多个Channel的发送和接收操作 select { case msg1 := <-ch1: fmt.Println("Received:", msg1) case msg2 := <-ch2: fmt.Println("Received:", msg2) } fmt.Println("Done")
}
Exécutez le code ci-dessus, il affichera :
Received: World
Done
Explication :
Dans l'exemple ci-dessus , nous avons créé deux canaux de type chaîne (ch1 et ch2) et envoyé des données à ces deux canaux dans deux coroutines Go différentes.
Dans la coroutine Go principale, utilisez l'instruction Select pour surveiller les opérations d'envoi et de réception sur ch1 et ch2. Puisque ch2 est prêt en 1 seconde, Select choisira d'exécuter la branche msg2 := <-ch2, de recevoir les données "Monde" et d'imprimer "Received: World".
Enfin, nous imprimons "Terminé" pour indiquer la fin de l'exécution du programme.
Résumé :
À travers les exemples ci-dessus, nous pouvons voir que Golang fournit des capacités de programmation simultanée très puissantes. En utilisant Channels et Select, nous pouvons facilement implémenter la transmission de données et l'interaction entre plusieurs coroutines Go, obtenant ainsi un traitement simultané efficace.
Pour devenir un excellent développeur Golang, apprendre à utiliser Channels et Select pour la programmation simultanée est absolument une compétence essentielle. Grâce à la pratique et à l'apprentissage continu dans le cadre de projets réels, nous pouvons comprendre ces concepts plus en profondeur et démontrer leur puissance dans des applications pratiques.
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!