Maison > développement back-end > Golang > Pourquoi ma Goroutine se termine-t-elle avant son exécution ?

Pourquoi ma Goroutine se termine-t-elle avant son exécution ?

Barbara Streisand
Libérer: 2024-10-30 10:59:02
original
1032 Les gens l'ont consulté

Why Is My Goroutine Terminating Before Execution?

Pourquoi ma Goroutine ne fonctionne-t-elle pas ?

Dans le domaine de la programmation Go, les goroutines fournissent un mécanisme puissant d'exécution simultanée. Cependant, ces goroutines peuvent parfois sembler ne pas répondre, laissant les développeurs dans un état de confusion.

Scénario :

Considérez le code Go suivant qui tente de créer une goroutine et d'envoyer messages via un canal :

<code class="go">package main
import "fmt"
func main(){

messages := make(chan string,3)

messages <- "one"
messages <- "two"
messages <- "three"

go func(m *chan string) {
    fmt.Println("Entering the goroutine...")
    for {
        fmt.Println(<- *m)
    }
}(&messages)

fmt.Println("Done!")
}</code>
Copier après la connexion

Lors de l'exécution de ce code, le résultat peut être surprenant :

Done!
Copier après la connexion

Le problème :

Malgré en créant une goroutine, le code n'exécute jamais les instructions qu'elle contient. La raison réside dans l'arrêt du programme principal. Dans Go, les goroutines s'exécutent indépendamment de la fonction principale. Dès que le programme principal se termine, toutes les goroutines en cours d'exécution sont terminées, même si elles n'ont pas eu la chance de s'exécuter.

La solution :

Pour empêcher le goroutine ne se termine pas prématurément, le programme principal doit être maintenu en vie jusqu'à ce que la goroutine termine son travail. Il existe plusieurs approches pour y parvenir :

  • Canal : Créez un deuxième canal pour attendre un message de la goroutine, bloquant ainsi le programme principal jusqu'à ce que le message soit reçu.
  • Synchronisation : Utilisez un sync.WaitGroup ou un mécanisme de synchronisation similaire pour signaler quand la goroutine a terminé sa tâche.
  • Timer : Créez une minuterie pour attendez une durée spécifiée, en vous assurant que la goroutine dispose de suffisamment de temps pour s'exécuter.

Recommandation :

Pour une compréhension plus complète du comportement et de la concurrence des goroutines dans Go, il est fortement recommandé de lire l'excellent article du blog Golang : "Concurrency in Go."

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal