Table des matières
Gin 的 Context 源码" >Gin 的 Context 源码
Code source du contexte de Gin" >Code source du contexte de Gin
Maison développement back-end Golang Analyse du code source du processus de demande de gin

Analyse du code source du processus de demande de gin

Aug 04, 2023 pm 05:26 PM
gin

Service http de la bibliothèque standard

Handler接口就可以注册到标准库的http server中。然后就会启动一个web应用。http请求流程当发生一个http请求的时候,在内部处理的流程是下面这样的:开启一个协程进行请求处理在conn.serve中调用serverHandler.ServeHTTP 函数如果有自己注册的Handle,那么就会调用注册的Handle的ServeHTTP 方法。这里还要注意的2个点如果自己在启动的时候没有注册自己的Handle,那么会采用标准库默认的ServeMux,全局名称为DefaultServeMux。如果请求URI为*并且请求Method为OPTIONS,那么Handle行为会被改成默认的globalOptionsHandler。上述分析的源码为GO 1.18.3。Gin 处理请求的流程前面我们看到只要注册自己的Handle接口到标准库就可以接管请求的处理;那么我们来看一下gin的Handle接口实现。在gin中,handleHTTPRequest就是匹配路径和对应handle 的处理函数。流程大致是这样:获取请求的路径在trees中找到对应的methodTree
Copier après la connexion
  • methodTree中匹配对应路径的处理函数handle
    Copier après la connexion
  • Par Suivant La méthode exécute la fonction enregistrée
    Next方法执行注册的函数
  • Gin 的 Context 源码

    在执行注册的函数之前我们发现在ServeHTTP方法中使用到了一个sync.Pool,它其实就是对gin.Context的复用。

    Analyse du code source du processus de demande de gin

    我们来看一下它的结构:

    // Context is the most important part of gin. It allows us to pass variables between middleware,
    // manage the flow, validate the JSON of a request and render a JSON response for example.
    type Context struct {
     writermem responseWriter
     Request   *http.Request
     Writer    ResponseWriter
    
     Params   Params
     handlers HandlersChain
     index    int8
     fullPath string
    
     engine       *Engine
     params       *Params
     skippedNodes *[]skippedNode
    
     // This mutex protects Keys map.
     mu sync.RWMutex
      ...
    }
    Copier après la connexion

    官方的reqresp都会保存在Context 中。并且gin自己增加了对官方http.ResponseWriter功能的扩展,也就是自己定义了一个接口gin.ResponseWriter

    Code source du contexte de Gin

    Avant d'exécuter la fonction enregistrée, nous avons constaté que dans ServeHTTP utilise une méthode sync.Pool, qui est en fait gin.Context réutilisation.

    Analyse du code source du processus de demande de gin
    🎜Voyons sa structure: 🎜rrreee🎜Officielreq et resp sera enregistré dans Contexte. etgin ajout de la prise en charge du http.ResponseWriter extension de fonction, c'est-à-dire définir soi-même une interfacegin.ResponseWriter🎜🎜Certaines autres méthodes sont des encapsulations à usage quotidien pour faciliter le développement. 🎜

    Analyse de la méthode de classe Bind de Context

    Analyse du code source du processus de demande de gin

    Vous pouvez voir dans le code source qu'un total d'entre elles sont prises en charge Binding; L'implémentation est la désérialisation, et je n'entrerai pas dans les détails un par un. Binding;其中的实现就是反序列化,具体的就不在一个一个的说了。

    重点是在bind 完成后有一个validate的方法,它其实是采用的github.com/go-playground/validator/v10作为验证数据的库。

    Analyse du code source du processus de demande de gin

    并采用懒加载的方式进行初始化,也就是说不用,不会初始化这个对象。

    Analyse du code source du processus de demande de gin

    其中验证数据的开发流程,请查看validator[1] 的详细用法。

    ginmode.go文件中有控制一些行为的存在,比如DisableBindValidation

    Le point clé est bind Une fois terminé, il y a un style validate méthode, qui utilise en fait la méthode github.com/go-playground/validator/v10 comme bibliothèque de validation des données. 🎜🎜Analyse du code source du processus de demande de gin🎜🎜Et utilisez le chargement paresseux pour l'initialisation, ce qui signifie que vous n'en avez pas besoin, cela l'objet ne sera pas initialisé. 🎜🎜Analyse du code source du processus de demande de gin🎜🎜Pour le processus de développement de vérification des données, veuillez vérifier validator🎜[1] . 🎜🎜Dansgin'smode.go Le fichier contient des contrôles pour certains comportements, tels que DisableBindValidation peut désactiver la fonction de validation des données. Cette méthode peut être désactivée en appelant cette méthode avant le démarrage du service. 🎜
    Analyse du code source du processus de demande de gin

    dossier ginS

    Ce dossier définit un gin. Objet Moteur. gin.Engine对象。

    Analyse du code source du processus de demande de gin

    并且也是采用懒加载的方式来进行初始化的。

    Analyse du code source du processus de demande de gin

    所以对于想使用全局的gin.Engine可以采用这个包,这样你就可以不用保存一个自己的全局gin.Engine

    Analyse du code source du processus de demande de gin
Et il est également initialisé à l'aide du chargement paresseux. 🎜🎜Analyse du code source du processus de demande de gin🎜🎜Donc pour ceux qui veulent utiliser le gin.Engine peut utiliser ce package, vous n'avez donc pas besoin de sauvegarder un gin.Engine objet. 🎜🎜🎜

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

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.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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 combiner Go avec Gin pour exporter des données Mysql vers un tableau Excel Comment combiner Go avec Gin pour exporter des données Mysql vers un tableau Excel May 26, 2023 pm 09:15 PM

1. Pour atteindre cet objectif, Golang utilise Excelize pour exporter le tableau vers le navigateur afin de le télécharger ou de l'enregistrer localement. L'importation ultérieure sera également écrite ici 2. La bibliothèque utilisée gogetgithub.com/xuri/excelize/v23, le répertoire du projet go-excel├─app│├─excelize││└─excelize.go│├─model││└ ─ sysUser.go│└─service│└─userService.go├─common│└─mysql.go├─go.mod├─go.sum├─main.go└─setting.json4.

Cinq projets open source sélectionnés en langage Go pour vous emmener explorer le monde de la technologie Cinq projets open source sélectionnés en langage Go pour vous emmener explorer le monde de la technologie Jan 30, 2024 am 09:08 AM

À l'ère actuelle de développement technologique rapide, les langages de programmation poussent comme des champignons après la pluie. L'un des langages qui a beaucoup retenu l'attention est le langage Go, apprécié par de nombreux développeurs pour sa simplicité, son efficacité, sa sécurité de concurrence et d'autres fonctionnalités. Le langage Go est connu pour son écosystème solide avec de nombreux excellents projets open source. Cet article présentera cinq projets open source sélectionnés en langage Go et amènera les lecteurs à explorer le monde des projets open source en langage Go. KubernetesKubernetes est un moteur d'orchestration de conteneurs open source pour l'automatisation

Go : les essentiels du développement linguistique : 5 recommandations de framework populaires Go : les essentiels du développement linguistique : 5 recommandations de framework populaires Mar 24, 2024 pm 01:15 PM

"Go Language Development Essentials : 5 recommandations de framework populaires" En tant que langage de programmation rapide et efficace, le langage Go est favorisé par de plus en plus de développeurs. Afin d'améliorer l'efficacité du développement et d'optimiser la structure du code, de nombreux développeurs choisissent d'utiliser des frameworks pour créer rapidement des applications. Dans le monde du langage Go, il existe de nombreux excellents frameworks parmi lesquels choisir. Cet article présentera 5 frameworks de langage Go populaires et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et utiliser ces frameworks. 1.GinGin est un framework Web léger avec une rapidité

Comment gérer les fichiers de ressources statiques dans le framework Gin Comment gérer les fichiers de ressources statiques dans le framework Gin Jun 23, 2023 am 10:54 AM

Le framework Gin est un framework Web léger, rapide et flexible qui permet aux développeurs de créer des applications Web hautes performances via une API simple et esthétique. Dans les applications Web, les fichiers de ressources statiques (tels que les images, CSS, JavaScript, polices, etc.) restent généralement inchangés. Ces fichiers de ressources doivent donc être traités efficacement pour améliorer les performances de l'application. Dans le framework Gin, le traitement des fichiers de ressources statiques est très simple. Cet article explique comment gérer les fichiers de ressources statiques dans le framework Gin. 1. En G

Explorez le framework du langage Go : 5 choix à ne pas manquer ! Explorez le framework du langage Go : 5 choix à ne pas manquer ! Feb 19, 2024 pm 02:29 PM

En tant que langage de programmation rapide et efficace, le langage Go a toujours été privilégié par les programmeurs. Dans l'écosystème du langage Go, les frameworks jouent un rôle essentiel en aidant les développeurs à créer des applications plus rapidement. Cet article présentera cinq frameworks de langage Go pour vous permettre de comprendre leurs caractéristiques et leur utilisation. 1. Framework Gin Le framework Gin est un framework Web léger avec des caractéristiques rapides et hautes performances. Utilisez le framework Gin pour créer rapidement des API et des applications Web RESTful. Voici un exemple de code simple :

Explication détaillée de la documentation de l'API et des tests automatisés dans le framework Gin Explication détaillée de la documentation de l'API et des tests automatisés dans le framework Gin Jun 22, 2023 pm 09:43 PM

Gin est un framework Web écrit en Golang. Il présente les avantages d'efficacité, de légèreté, de flexibilité, de performances relativement élevées et de facilité d'utilisation. Dans le développement du framework Gin, la documentation API et les tests automatisés sont très importants. Cet article examinera en profondeur la documentation de l'API et les tests automatisés dans le framework Gin. 1. Documentation API La documentation API est utilisée pour enregistrer les informations détaillées de toutes les interfaces API afin de faciliter leur utilisation et leur compréhension par les autres développeurs. Le framework Gin fournit une variété d'outils de documentation API, notamment Swagger, GoSwa

Quels sont les frameworks Golang les plus populaires sur le marché ? Quels sont les frameworks Golang les plus populaires sur le marché ? Jun 01, 2024 pm 08:05 PM

Les frameworks Go les plus populaires actuellement sont : Gin : framework web léger et performant, simple et facile à utiliser. Echo : un framework Web rapide et hautement personnalisable qui fournit un routage et un middleware hautes performances. GorillaMux : Un multiplexeur rapide et flexible qui offre des options de configuration de routage avancées. Fibre : un framework Web hautes performances optimisé pour les performances qui gère un nombre élevé de requêtes simultanées. Martini : un framework Web modulaire avec une conception orientée objet qui fournit un riche ensemble de fonctionnalités.

Analyse du code source du processus de demande de gin Analyse du code source du processus de demande de gin Aug 04, 2023 pm 05:26 PM

La demande et la réponse officielles seront enregistrées dans le contexte. Et gin lui-même a ajouté une extension à la fonction officielle http.ResponseWriter, c'est-à-dire qu'il a défini une interface gin.ResponseWriter.

See all articles