Table des matières
Comment fonctionne le middleware dans Go
Cas d'utilisation courants
Exemple: chaînage middleware
Utilisation de bibliothèques tierces
Maison développement back-end Golang Que sont les middleware dans le contexte des serveurs Web Golang?

Que sont les middleware dans le contexte des serveurs Web Golang?

Sep 16, 2025 am 02:16 AM
golang middleware

Le middleware dans les serveurs Web Go est des fonctions qui interceptent les demandes HTTP avant d'atteindre le gestionnaire, permettant une fonctionnalité réutilisable de coupe croisée; Ils fonctionnent en emballage des gestionnaires pour ajouter une logique pré et post-traitement tel que la journalisation, l'authentification, les COR ou la récupération d'erreur, et peuvent être enchaînés pour former un pipeline de traitement en couches, chaque middleware appelant le suivant jusqu'à ce que le gestionnaire final soit atteint, ce qui rend le code modulaire et maintenable. P>

Que sont les middleware dans le contexte des serveurs Web Golang?

Le middleware dans le contexte des serveurs Web de Golang est des fonctions qui se trouvent entre la demande HTTP entrante et le gestionnaire de demande réel. Ils vous permettent d'intercepter, d'inspecter, de modifier ou d'agir sur les demandes et les réponses avant d'atteindre le gestionnaire final ou sont renvoyés au client.

Considérez le middleware comme une série de couches que chaque demande passe. Vous pouvez les utiliser pour gérer des préoccupations croisées telles que la journalisation, l'authentification, la validation des demandes, les COR, la compression ou la gestion des erreurs, sans encombre de votre logique de gestionnaire principal.

Comment fonctionne le middleware dans Go

Dans Go, un middleware HTTP est généralement une fonction qui prend un http.Handler et renvoie un autre http.Handler . Cela vous permet d'envelopper des mancheurs avec un comportement supplémentaire.

Voici la signature de base:

 func middleware (suivant http.handler) http.handler {
    return http.handlerfunc (func (w http.responsewriter, r * http.request) {
        // Pre-traitement: faites quelque chose avant le gestionnaire
        Log.println ("Demande reçue:", R.Url.Path)

        // appelle le gestionnaire suivant de la chaîne
        next.servehttp (w, r)

        // post-traitement: faites quelque chose après le gestionnaire
        Log.println ("Demande terminée:", R.Url.Path)
    })
}

Vous pouvez enchaîner plusieurs middleware ensemble afin que la demande passe par chacune avant d'atteindre le gestionnaire final.

Cas d'utilisation courants

  • Journalisation : enregistrez les détails des demandes entrantes de débogage ou de surveillance.
  • Authentification / autorisation : Vérifiez les jetons valides ou les autorisations utilisateur.
  • CORS : Ajoutez des en-têtes pour autoriser les demandes d'origine croisée.
  • Récupération de la panique : récupérer des paniques dans les gestionnaires et renvoyer une erreur appropriée de 500.
  • Validation de la demande : valider les en-têtes, le corps ou les paramètres de requête.
  • Limitation des taux : restreignez la fréquence à laquelle un client peut faire des demandes.

Exemple: chaînage middleware

 Func LoggingMiddleware (Next http.handler) http.handler {
    return http.handlerfunc (func (w http.responsewriter, r * http.request) {
        Log.printf ("% S% S", R.Method, R.url.Path)
        next.servehttp (w, r)
    })
}

func authmiddleware (suivant http.handler) http.handler {
    return http.handlerfunc (func (w http.responsewriter, r * http.request) {
        Token: = R.Header.get ("Autorisation")
        Si jeton! = "Secret" {
            Http.Error (W, "non autorisé", http.statusunauthorized)
            retour
        }
        next.servehttp (w, r)
    })
}

// le gestionnaire final
http.handle ("/", loggingmiddleware (authmiddleware (http.handlerfunc (homehandler)))))

Alternativement, vous pouvez créer une aide pour composer plus de middleware plus proprement.

Utilisation de bibliothèques tierces

Les cadres Web GO populaires et les bibliothèques comme Gorilla Mux , Chi et Gin fournissent une prise en charge intégrée pour le middleware avec une syntaxe plus facile.

Par exemple, avec Chi :

 r: = chi.newrouter ()
R.Use (middleware.logger)
R.Use (authmiddleware)
R.Get ("/", HomeHandler)

La méthode .Use() de Chi s'applique au middleware à tous les itinéraires, ce qui rend la configuration propre et lisible.

Le middleware rend les serveurs Web Go Modular, réutilisables et plus faciles à maintenir en séparant les préoccupations. Ils sont un élément essentiel de la création d'applications Web robustes et évolutives en Go.

Fondamentalement, si vous faites quelque chose qui s'applique sur plusieurs itinéraires: utilisez du middleware.

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 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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment implémentez-vous un modèle d'observateur à Golang? Comment implémentez-vous un modèle d'observateur à Golang? Aug 14, 2025 pm 12:04 PM

Dans GO, le mode observateur peut être implémenté via des interfaces et des canaux, l'interface d'observateur peut être définie, l'interface d'observateur comprend la méthode de mise à jour, la structure du sujet maintient la liste des observateurs et le canal de message, ajouter des observateurs via la pièce jointe, notifie les messages, le service de mise en œuvre de listengoroutine Observer et déclenche des événements, et réalise un mécanisme de notification d'événements à couplage lâche, qui convient aux systèmes axés sur les événements, à la journalisation et aux notifications de messages et à d'autres scénarios.

Comment intégrer des actifs statiques dans un binaire de Golang Comment intégrer des actifs statiques dans un binaire de Golang Aug 30, 2025 am 04:50 AM

En utilisant le package d'intégration de Go, vous pouvez intégrer des ressources statiques directement dans des fichiers binaires. À partir de GO1.16, en utilisant la directive // ​​go: ENCHED avant les variables, un seul fichier, plusieurs fichiers ou des répertoires entiers peut être incorporé, en prenant en charge la chaîne, [] octet ou les types embed.fs. La teneur en intégrée est solidifiée en binaire au temps de compilation. Le chemin doit exister et est sensible à la casse. Il est recommandé d'utiliser des outils intégrés au lieu d'outils tiers tels que Go-Bindata. Cette méthode est simple et efficace et est devenue une pratique standard.

Comment construire une API reposante sans cadre à Golang Comment construire une API reposante sans cadre à Golang Aug 20, 2025 am 01:47 AM

Oui, en utilisant la bibliothèque Standard Go, vous pouvez créer une API RESTful, gérer les demandes via le contexte Net / HTTP, Encoding / JSON et la gestion du contexte, combiné avec HTTP.Servermux Routing, une résolution de chemin manuelle, une encapsulation au middleware et une gestion des erreurs appropriée, vous pouvez obtenir un service léger et contrôlable RESTUL SERVICE SUR LE MANGEMENT SUR LE TRADRESS mécanisme.

Quelles sont les différentes façons de formater les chaînes à Golang? Quelles sont les différentes façons de formater les chaînes à Golang? Aug 23, 2025 pm 01:25 PM

FMT.Sprintf est utilisé pour formater et retourner les chaînes, adaptées à l'insertion et au stockage variables; 2.fmt.fprintf écrit des résultats formatés directement sur io.writer, adaptés à l'écriture de fichiers ou de réseau; 3.Strings.join est utilisé pour connecter efficacement les tranches de chaîne; 4. Les opérateurs conviennent à des coutures uniques simples; 5. STRINGS.builder offre des performances élevées lors de la boucle ou des coutures à grande échelle; 6.Package de goûts convient à la génération de texte dynamique complexe basée sur des données, telles que les fichiers HTML ou de configuration. La méthode appropriée doit être sélectionnée en fonction des performances, de la lisibilité et du scénario pour se terminer avec une phrase complète.

Que sont les middleware dans le contexte des serveurs Web Golang? Que sont les middleware dans le contexte des serveurs Web Golang? Sep 16, 2025 am 02:16 AM

Middlewareingowebserversafunction aterttercepthttprequestsboreetheyreachthehandler, permettre à la transformation de la transmission de la transmission; ils enworkbywrapinghandlerstoaddpre-andpost-processingLogicsuchy

Comment convertir les types de données à Golang Comment convertir les types de données à Golang Aug 19, 2025 pm 02:43 PM

La conversion de type dans GO doit être effectuée explicitement et ne peut pas être implicitement. Pour les types numériques, utilisez le type cible comme fonction de conversion, tel que INT64 (a), mais faites attention au débordement et à la perte de précision; La conversion entre les chaînes et les nombres nécessite l'utilisation de fonctions telles que ATOI, ParseInt, parsefloat, itoa et formatfloat dans le package STRCONV et gérer les erreurs possibles; Les chaînes et les tranches d'octets peuvent être directement converties les unes aux autres via [] octets (s) et chaîne (b), ce qui convient aux opérations d'E / S et de réseau; La conversion de l'interface {} (ou n'importe quel) type dépend de l'affirmation de type x. (type) ou de type commutateur pour extraire en toute sécurité le type d'origine, en évitant l'utilisation de la conversion de l'interface {} (ou tout autre) Type de type Affirmation de type x. (type) ou commutateur de type pour éviter pour éviter le commutateur pour éviter pour éviter le commutateur

Qu'est-ce que les tests axés sur la table à Golang? Qu'est-ce que les tests axés sur la table à Golang? Aug 28, 2025 am 01:38 AM

Table-DriventingingOsapatterNTHATUSADATASTURTURE, Généralement en cas d'élite des instruments, les todémultiplestres de contribution à l'instar destinés, ce qui permet de réaliser la réduction de la manière dont la manière

Comment s'intégrer à une file d'attente de messages comme Rabbitmq à Golang Comment s'intégrer à une file d'attente de messages comme Rabbitmq à Golang Sep 02, 2025 am 07:46 AM

La réponse est d'utiliser la bibliothèque AMQP091-Go pour connecter RabbitMQ, déclarer des files d'attente et des commutateurs, publier en toute sécurité des messages, la consommation de messages avec la QoS et la reconnaissance manuelle, et reconnecter les mécanismes pour obtenir une intégration fiable de la file d'attente de messages dans GO. L'exemple complet comprend les processus de connexion, de production, de consommation et d'erreur, garantissant que les messages ne sont pas perdus et ne soutiennent pas la déconnexion et la reconnexion, et enfin l'exécution de RabbitMQ via Docker pour terminer l'intégration de bout en bout.

See all articles