Question :
Dans l'exemple de code fourni, où une goroutine est lancée dans un Gestionnaire HTTP (HomeHandler), la goroutine terminera-t-elle toujours son exécution, même après que le serveur ait renvoyé la réponse au client ?
Exemple de code :
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) }
Réponse :
Oui, la goroutine démarrée dans work terminera son exécution dans toutes les situations.
Les goroutines sont des threads légers au sein d'un programme Go et ne sont pas contraintes par l'exécution de la fonction principale ou du gestionnaire HTTP. Ils continuent de s'exécuter simultanément à moins qu'ils ne rencontrent des erreurs ou qu'ils ne soient explicitement arrêtés. Dans ce cas, la goroutine de travail est démarrée de manière asynchrone et la fonction HomeHandler est renvoyée immédiatement après avoir écrit la réponse au client. Même après le retour de la fonction de gestionnaire et le serveur envoie la réponse, la goroutine de travail continue de s'exécuter jusqu'à ce qu'elle termine sa tâche de mise en veille pendant 10 secondes et d'imprimer son message d'achèvement.
Les seuls scénarios dans lesquels une goroutine peut ne pas terminer sont :
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!