Maison >développement back-end >Golang >Comment fonctionne la méthode « ServeHTTP » de Go dans les gestionnaires HTTP personnalisés ?

Comment fonctionne la méthode « ServeHTTP » de Go dans les gestionnaires HTTP personnalisés ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-28 06:36:14587parcourir

How Does Go's `ServeHTTP` Method Work in Custom HTTP Handlers?

Problèmes pour comprendre ServeHTTP - Comment fonctionne ce code ?

Dans le développement Web Go, l'implémentation de la méthode ServeHTTP permet à un type de servir de Gestionnaire HTTP.

Dans l'exemple de code fourni :

type foo int

func (m foo) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Some text")
}

foo implémente le Méthode ServeHTTP, ce qui en fait un gestionnaire HTTP. Lorsque http.ListenAndServe est appelé avec foo, la séquence d'événements suivante se produit :

  • http.ListenAndServe appelle srv.ListenAndServe(), qui configure un écouteur sur le port 8080.
  • Lorsqu'une requête est reçue, l.Accept() crée un objet de connexion (c) qui contient les rédacteurs de requête et de réponse. (rw).
  • c.serve() est lancé dans une goroutine.
  • Dans la goroutine, w, err := c.readRequest(ctx) lit la requête et crée un rédacteur de réponse object (w).
  • serverHandler{...} encapsule l'appel ServeHTTP et garantit qu'un gestionnaire est disponible (soit le gestionnaire personnalisé, soit le gestionnaire par défaut multiplexeur).
  • Enfin, handler.ServeHTTP(rw, req) appelle la méthode ServeHTTP personnalisée à partir de foo, qui écrit "Du texte" à l'auteur de la réponse.

En substance, http.ListenAndServe exécute un serveur avec le gestionnaire fourni. Lorsqu'une requête est reçue, le serveur appelle la méthode ServeHTTP du gestionnaire, qui est implémentée dans foo. Cette implémentation écrit le texte spécifié à l'auteur de la réponse et le renvoie au client.

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!

Déclaration:
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