Maison > développement back-end > Golang > Pourquoi l'utilisation de Goroutines provoque-t-elle des « appels à réponse multiple.WriteHeader » dans les gestionnaires HTTP de Go ?

Pourquoi l'utilisation de Goroutines provoque-t-elle des « appels à réponse multiple.WriteHeader » dans les gestionnaires HTTP de Go ?

Mary-Kate Olsen
Libérer: 2024-12-10 06:53:00
original
553 Les gens l'ont consulté

Why Does Using Goroutines Cause

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!

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