Appels WriteHeader multiples dans le gestionnaire HTTP de Go
Dans un simple programme Go comportant un serveur net/http, un développeur rencontre le « réponse multiple Erreur « .WriteHeader calls » lors de la tentative de traitement des requêtes HTTP. L'erreur se produit lorsque le programme intègre une goroutine pour exécuter la fonction HandleIndex, malgré le fait que la fonction de gestionnaire est conçue pour écrire un en-tête une fois et fournir un corps statique.
Explication de l'erreur
La fonction anonyme responsable du traitement des requêtes entrantes imprime l'URL, lance la fonction HandleIndex dans une nouvelle goroutine et procède à l'exécution. Lorsqu'une fonction de gestionnaire omet de définir l'état de la réponse avant l'appel initial à Write, Go définit automatiquement l'état sur 200 (HTTP OK). De plus, si la fonction de gestionnaire n'écrit aucun contenu dans la réponse (et ne définit pas l'état de la réponse et se termine normalement), cela est traité comme un traitement de demande réussi, ce qui entraîne un état de réponse de 200.
Dans ce cas, la fonction anonyme ne définit pas l'état de la réponse et n'écrit rien dans la réponse. Par conséquent, Go définit l’état de la réponse sur 200 HTTP OK. Puisque chaque requête est traitée dans son propre goroutine, si HandleIndex est appelé dans un nouveau goroutine, la fonction anonyme d'origine poursuivra son exécution, y compris la définition de l'en-tête de réponse. Parallèlement, la goroutine nouvellement démarrée définira également l'en-tête de réponse, provoquant l'erreur « appels à réponse multiple.WriteHeader ».
Solution : suppression de la goroutine
En éliminant le Mot-clé "go", HandleIndex sera invoqué dans le même goroutine que la fonction de gestionnaire, garantissant que l'en-tête de réponse est défini avant la fonction de gestionnaire revient. Cela empêche le package "net/http" de tenter de définir à nouveau l'en-tête de réponse, résolvant ainsi l'erreur.
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!