Maison > Article > développement back-end > Comment quitter la coroutine Golang
Golang est un langage de programmation très populaire, et sa Goroutine est l'une de ses fonctionnalités emblématiques. L'avantage de Goroutine est qu'il peut facilement implémenter la concurrence, ce qui permet à Golang de bien gérer les scénarios à forte concurrence. Mais comment quitter correctement les Goroutines lorsque nous les utilisons ? Dans cet article, nous aborderons les méthodes de sortie de Goroutine.
1. Utiliser le contrôle de canal
L'utilisation de canal est l'un des moyens de quitter Goroutine dans Golang. Contrôlez si Goroutine se ferme en créant un canal de type booléen. Une fois l'exécution de Goroutine terminée, nous pouvons demander à Goroutine de quitter en écrivant une valeur de type bool dans le canal.
L'exemple de code est le suivant :
package main import ( "fmt" ) func goroutine(ch chan bool) { for { select { case <-ch: fmt.Println("goroutine exit") return default: fmt.Println("goroutine running") } } } func main() { ch := make(chan bool) go goroutine(ch) fmt.Println("main thread") ch <- true }
Dans le code ci-dessus, nous avons créé une fonction goroutine(), qui s'exécutera en boucle. Dans la fonction main(), nous créons un canal de type bool et le transmettons à la fonction goroutine(). Dans la fonction goroutine, nous utilisons l'instruction select pour détecter si une valeur est écrite dans le canal. Si une valeur est écrite, l'opération de sortie sera effectuée.
Dans la fonction main(), nous utilisons l'instruction ch <- true pour écrire une valeur de type booléen dans le canal, ce qui déclenchera l'opération de sortie dans la fonction goroutine.
En utilisant des canaux pour contrôler la sortie de Goroutine, nous pouvons arrêter Goroutine avec grâce.
2. Utilisez le package contextuel
En plus d'utiliser des canaux pour contrôler la sortie de Goroutine, Golang fournit également le package contextuel pour implémenter la sortie de Goroutine. Le package de contexte fournit un type de contexte qui peut être utilisé pour transférer des informations entre différentes Goroutines, notamment en spécifiant le délai d'attente, l'annulation et d'autres opérations de Goroutine.
Dans Goroutine, nous pouvons utiliser la méthode WithContext() du package context pour créer un objet de type Context, puis utiliser la méthode WithCancel() pour annuler l'objet Context :
package main import ( "fmt" "context" ) func goroutine(ctx context.Context) { for { select { case <-ctx.Done(): fmt.Println("goroutine exit") return default: fmt.Println("goroutine running") } } } func main() { ctx, cancel := context.WithCancel(context.Background()) go goroutine(ctx) fmt.Println("main thread") cancel() }
Dans le code ci-dessus, nous utilisons d'abord WithContext () crée un objet ctx de type Context, puis utilise la méthode WithCancel() pour créer une fonction Cancel pour annuler l'objet ctx. Dans la fonction goroutine(), nous utilisons l'instruction select pour surveiller la méthode Done() de l'objet ctx. Si cette méthode est déclenchée, cela signifie que Goroutine doit quitter et effectuer l'opération de sortie.
Dans la fonction main(), nous avons d'abord appelé la méthode WithContext() pour créer l'objet Context ctx, puis avons passé l'objet à la fonction goroutine(). Ensuite, nous appelons la fonction Cancel(), qui déclenche immédiatement l'opération de sortie dans la fonction goroutine().
En utilisant le package contextuel, nous pouvons arrêter Goroutine plus gracieusement.
Conclusion
Dans cet article, nous avons présenté en détail comment quitter correctement la coroutine Golang. En utilisant le package de canal ou de contexte, nous pouvons arrêter le Goroutine avec élégance. Dans le développement réel, la méthode à choisir dépend de la situation spécifique, mais quelle que soit la méthode, nous devons suivre les principes de conception du langage Golang et gérer l'opération de sortie avec élégance pour garantir que notre programme reste toujours stable et fiable.
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!