目录
Gin 的 Context 源码" >Gin 的 Context 源码
Gin 的 Context 源码" >Gin 的 Context 源码
首页 后端开发 Golang Gin 请求流程源码分析

Gin 请求流程源码分析

Aug 04, 2023 pm 05:26 PM
gin

标准库的http服务

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
登录后复制
  • methodTree中匹配对应路径的处理函数handle
    登录后复制
  • 通过Next方法执行注册的函数
    Next方法执行注册的函数
  • Gin 的 Context 源码

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

    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
      ...
    }
    登录后复制

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

    Gin 的 Context 源码

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

    Gin 请求流程源码分析
    🎜我们来看一下它的结构:🎜rrreee🎜官方的reqresp都会保存在Context 中。并且gin自己增加了对官方http.ResponseWriter功能的扩展,也就是自己定义了一个接口gin.ResponseWriter🎜🎜其他的一些方法都是对日常使用的一些封装,方便开发。🎜

    Context 的 Bind 类方法分析

    Gin 请求流程源码分析

    在源码中可以看到一共支持这些的Binding;其中的实现就是反序列化,具体的就不在一个一个的说了。Binding;其中的实现就是反序列化,具体的就不在一个一个的说了。

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

    Gin 请求流程源码分析

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

    Gin 请求流程源码分析

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

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

    重点是在bind 完成后有一个validate的方法,它其实是采用的github.com/go-playground/validator/v10作为验证数据的库。🎜🎜Gin 请求流程源码分析🎜🎜并采用懒加载的方式进行初始化,也就是说不用,不会初始化这个对象。🎜🎜Gin 请求流程源码分析🎜🎜其中验证数据的开发流程,请查看validator🎜[1] 的详细用法。🎜🎜在ginmode.go文件中有控制一些行为的存在,比如DisableBindValidation 就可以关闭数据验证功能,是在服务启动之前调用该方法即可关闭。🎜
    Gin 请求流程源码分析

    ginS 文件夹

    这个文件夹里面定义了一个默认的内部全局gin.Engine对象。gin.Engine对象。

    Gin 请求流程源码分析

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

    Gin 请求流程源码分析

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

    Gin 请求流程源码分析
并且也是采用懒加载的方式来进行初始化的。🎜🎜Gin 请求流程源码分析🎜🎜所以对于想使用全局的gin.Engine可以采用这个包,这样你就可以不用保存一个自己的全局gin.Engine对象了。🎜🎜🎜

以上是Gin 请求流程源码分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Go怎么结合Gin导出Mysql数据到Excel表格 Go怎么结合Gin导出Mysql数据到Excel表格 May 26, 2023 pm 09:15 PM

1、实现目标Golang使用excelize导出表格到浏览器下载或者保存到本地。后续导入的话也会写到这里2、使用的库gogetgithub.com/xuri/excelize/v23、项目目录go-excel├─app│├─excelize││└─excelize.go│├─model││└─sysUser.go│└─service│└─userService.go├─common│└─mysql.go├─go.mod├─go.sum├─main.go└─setting.json4、主要代码编写

五个精选的Go语言开源项目,带你探索技术世界 五个精选的Go语言开源项目,带你探索技术世界 Jan 30, 2024 am 09:08 AM

在当今科技快速发展的时代,编程语言也如雨后春笋般涌现出来。其中一门备受瞩目的语言就是Go语言,它以其简洁、高效、并发安全等特性受到了许多开发者的喜爱。Go语言以其强大的生态系统而著称,其中有许多优秀的开源项目。本文将介绍五个精选的Go语言开源项目,带领读者一起探索Go语言开源项目的世界。KubernetesKubernetes是一个开源的容器编排引擎,用于自

Go语言开发必备:5个热门框架推荐 Go语言开发必备:5个热门框架推荐 Mar 24, 2024 pm 01:15 PM

《Go语言开发必备:5个热门框架推荐》Go语言作为一门快速、高效的编程语言,受到越来越多开发者的青睐。为了提高开发效率,优化代码结构,很多开发者选择使用框架来快速搭建应用。在Go语言的世界中,有许多优秀的框架可供选择。本文将介绍5个热门的Go语言框架,并提供具体的代码示例,帮助读者更好地理解和使用这些框架。1.GinGin是一个轻量级的Web框架,拥有快速

Gin框架中如何处理静态资源文件 Gin框架中如何处理静态资源文件 Jun 23, 2023 am 10:54 AM

Gin框架是一种轻量级、快速、灵活的Web框架,它可以让开发人员通过简单且优美的API构建高性能的Web应用程序。在Web应用程序中,静态资源文件(如图片、CSS、JavaScript、字体等)通常是不变的,因此需要能够高效地处理这些资源文件以提高应用程序的性能。在Gin框架中,处理静态资源文件非常简单。本文将介绍在Gin框架中如何处理静态资源文件。一、在G

探索Go语言框架:5个不容错过的选择! 探索Go语言框架:5个不容错过的选择! Feb 19, 2024 pm 02:29 PM

Go语言作为一种快速、高效的编程语言,一直受到程序员的青睐。在Go语言的生态系统中,框架扮演着至关重要的角色,帮助开发者更快速地构建应用程序。本文将介绍五个Go语言框架,让你了解其特点和用法。1.Gin框架Gin框架是一个轻量级的Web框架,具有快速、高性能的特点。使用Gin框架可以快速构建RESTfulAPI和Web应用程序。以下是一个简单的示例代码:

Gin框架中的API文档和自动化测试详解 Gin框架中的API文档和自动化测试详解 Jun 22, 2023 pm 09:43 PM

Gin是一个用Golang编写的Web框架,它具有高效、轻量、灵活等优点,性能相对较高,并且易于使用。在Gin框架开发中,API文档和自动化测试十分重要。本文将深入探讨Gin框架中的API文档和自动化测试。一、API文档API文档用于记录所有API接口的详细信息,方便其他开发人员使用和理解。Gin框架提供了多种API文档工具,包括Swagger、GoSwa

市面上最流行的golang框架有哪些? 市面上最流行的golang框架有哪些? Jun 01, 2024 pm 08:05 PM

目前最流行的Go框架有:Gin:轻量级、高性能的Web框架,简洁易用。Echo:快速、高度可定制的Web框架,提供高性能路由和中间件。GorillaMux:快速、灵活的多路复用器,提供高级路由配置选项。Fiber:性能优化的高性能Web框架,处理高并发请求。Martini:面向对象设计的模块化Web框架,提供丰富的功能集。

Gin 请求流程源码分析 Gin 请求流程源码分析 Aug 04, 2023 pm 05:26 PM

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

See all articles