Lors de l'exécution d'une goroutine dans un gestionnaire HTTP, il est naturel de se demander si son exécution se poursuivra après le retour de la réponse. Considérez l'exemple de code suivant :
package main import ( "fmt" "net/http" "time" ) func worker() { fmt.Println("worker started") time.Sleep(time.Second * 10) fmt.Println("worker completed") } func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/home", HomeHandler) http.ListenAndServe(":8081", nil) }
Ce code lance une goroutine dans le HomeHandler qui se met en veille pendant 10 secondes avant la fin de l'impression. Une fois la réponse écrite, la goroutine principale revient de la fonction HomeHandler.
Dans ce scénario spécifique, la goroutine terminera en effet son exécution, en imprimant les déclarations "worker démarré" et "travailleur terminé" sur la console. En effet :
La seule façon de terminer prématurément la goroutine dans ce cas serait de rencontrer un état instable, comme l'exécution manque de mémoire, ou pour arrêter explicitement la goroutine à l'aide de techniques de synchronisation (non couvertes dans cet exemple de code).
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!