Différences entre les versions de « Programmation en Go/Goroutines »

m
<source lang="go">
m (<source lang="go">)
Le mot clé '''go''' permet de lancer un appel de fonction en une goroutine, et de ne pas attendre le résultat:
 
<source lang="go"> go list.Sort() // trie une liste en parallèle</source>
 
Il est courant d'utiliser une fonction littérale pour appeler une goroutine:
 
<source lang="go">
go func(arguments, ...) {
commandes...
} (paramètres, ...)
</source>
 
== Les canaux (de communication) ==
On peut créer un canal avec make:
 
<source lang="go">
c := make(chan int)
</source>
 
Ensuite on peut envoyer et recevoir des données du type précisé, et la première donnée reçue est la première donnée envoyée. (''First In First Out'')
Dans cet exemple, on lance une goroutine et on attend sa fin en recevant le signal qu'elle va envoyer:
 
<source lang="go">
go func() {
list.Sort()
blahBlahPendantUnMoment()
<-c // Attend la fin du tri de la liste à la réception du signal
</source>
 
== Canaux avec tampon ==
Dans l'exemple suivant, MaxTaches tâches peuvent se dérouler en parallèle:
 
<source lang="go">
var sem = make(chan int, MaxTaches)
 
}
}
</source>
 
La syntaxe suivante permet de savoir si une case est disponible dans le canal:
 
<source lang="go"> v,ok = <- canal</source>
 
== Select ==
 
Select est une structure de contrôle similaire à switch. Elle permet de gérer une multitude d'envois et de réceptions à travers des canaux différents.
 
Voici sa syntaxe:
 
<source lang="go">
select {
case canal <- valeur: commandes...
default: ...
}
</source>
 
Les différentes alternatives sont évaluées dans l'ordre de leur écriture, la première réception ou émission dans un canal déclenche l'exécution des commandes correspondant à l'alternative. Si aucune de ces opérations ne réussit, le cas par défaut est exécuté, sinon l'opération bloque jusqu'à la réception ou l'envoi d'une donnée.
 
Le choix entre les différentes alternatives est basé sur un processus pseudo-aléatoire.
 
Enfin, une structure '''select''' sans aucune alternative bloque éternellement.
 
11

modifications