Sobes.tech
Junior — Middle

Comment arrêter correctement une goroutine en cours d'exécution, si nécessaire, pour que la fin se produise en fonction d'un signal externe ou d'une condition, même si le résultat n'a pas encore été obtenu?

sobes.tech IA

Réponse de l'IA

Pour arrêter correctement une goroutine en cours d'exécution par un signal externe ou une condition en Go, on utilise généralement le contexte (context.Context) ou des canaux pour transmettre le signal d'annulation.

Exemple avec utilisation du contexte :

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            // Signal d'annulation reçu, terminer la goroutine
            return
        default:
            // Effectuer le travail
        }
    }
}

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

    // À un moment donné, appeler cancel() pour arrêter la goroutine
    cancel()
}

Cette approche permet à la goroutine de vérifier régulièrement si un signal d'arrêt a été envoyé, et de se terminer proprement, même si le résultat n'est pas encore obtenu. On peut également utiliser un canal pour transmettre le signal d'arrêt, mais context est une méthode plus idiomatique et pratique en Go.