Maison  >  Article  >  développement back-end  >  Comment fermer la goroutine dans Golang

Comment fermer la goroutine dans Golang

PHPz
PHPzoriginal
2023-04-14 14:34:32582parcourir

Golang est un langage de programmation très populaire présentant les caractéristiques d'efficacité, d'évolutivité et de fiabilité. Dans Golang, la goroutine est l'un des concepts très importants. Les Goroutines sont des threads légers qui permettent à plusieurs fonctions de s'exécuter simultanément dans le même processus. Lors de l'écriture de programmes Golang, la fermeture de goroutine est une question très importante. Cet article explique comment fermer goroutine.

  1. Utilisez des variables de type chan et bool pour fermer la goroutine

Dans Golang, vous pouvez utiliser des canaux pour gérer les goroutines. Nous pouvons créer une variable de type booléen et l'inclure dans le canal. Dans goroutine, nous pouvons utiliser l'instruction select pour écouter la chaîne. Dès que le canal est fermé, la goroutine cessera de fonctionner.

Voici un exemple de code :

func worker(c <-chan bool) {
    for {
        select {
        case <-c:
            return
        default:
            // do some work
        }
    }
}

func main() {
    c := make(chan bool)
    go worker(c)

    // some other work

    close(c)
}

Dans cet exemple de code, nous créons d'abord un canal c. Ensuite, nous utilisons le mot-clé go pour créer une goroutine qui appelle la fonction de travail et passe c comme paramètre. Dans la fonction principale, nous effectuons d'autres travaux et appelons enfin close(c) pour fermer la goroutine. Dans la fonction Worker, nous utilisons l'instruction select pour écouter le canal. Dès que le canal est fermé, la goroutine cessera de fonctionner.

  1. Utilisez le package de contexte pour arrêter goroutine

Le package de contexte de Golang fournit un moyen élégant d'arrêter goroutine. Le contexte est un contexte annulable qui fournit des valeurs et des méthodes qui peuvent être transmises à la goroutine pour arrêter la goroutine. Une fois le contexte annulé, toutes les goroutines dérivées de ce contexte seront annulées.

Voici un exemple de code :

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            return
        default:
            // do some work
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // some other work

    cancel()
}

Dans cet exemple de code, nous créons d'abord un contexte d'annulation ctx et le convertissons en un contexte annulable à l'aide de la fonction context.WithCancel. Ensuite, nous utilisons le mot-clé go pour créer une goroutine qui appelle la fonction de travail et passe ctx en paramètre. Dans la fonction principale, nous effectuons d'autres travaux et enfin appelons la fonction Cancel() pour annuler la goroutine. Dans la fonction Worker, nous utilisons l'instruction select pour écouter le contexte. Une fois le contexte annulé, la goroutine cessera de fonctionner.

Résumé

Fermer la goroutine est une question très importante dans l'écriture de programmes Golang. Dans cet article, nous avons présenté deux façons de fermer goroutine, à savoir en utilisant des variables de type chan et bool et en utilisant le package de contexte. Avec une bonne gestion des goroutines, nous pouvons écrire des programmes Golang efficaces, évolutifs et fiables.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn