Sobes.tech
Junior — Middle

Comment réaliser une terminaison sécurisée d'une goroutine lorsque le résultat attendu n'est pas reçu, en utilisant la structure switch-case ?

sobes.tech IA

Réponse de l'IA

Pour terminer en toute sécurité une goroutine en attendant un résultat, vous pouvez utiliser la construction select avec plusieurs cas, y compris un délai d'attente ou un signal d'annulation. En Go, il n'existe pas de switch-case direct pour les canaux, mais select remplit une fonction similaire.

Exemple avec délai d'attente :

func worker(done chan struct{}) {
    select {
    case result := <-someChannel:
        fmt.Println("Résultat reçu :", result)
    case <-time.After(5 * time.Second):
        fmt.Println("Délai d'attente dépassé, terminaison de la goroutine")
        return
    case <-done:
        fmt.Println("Signal de terminaison reçu")
        return
    }
}

Ici, la goroutine attend des données de someChannel. Si les données n'arrivent pas en 5 secondes, le délai d'attente est déclenché et la goroutine se termine. Un signal peut également être envoyé via le canal done pour la terminer de force.

Cette approche évite que la goroutine reste bloquée et permet de la contrôler en toute sécurité.