Gin 框架是怎么使用 net http 包的(gin.go)

Gin 框架是基于 Go 语言的标准库 net/http 构建的,它使用 net/http 提供的基础功能来构建自己的高性能 Web 应用框架。

具体来说,Gin 使用 net/http 的以下方面:

1,HandlerFunc: Gin 使用 net/http 的 HandlerFunc 类型,这是一个可以作为 HTTP 处理程序的函数类型。Gin 自己的路由系统允许注册这些函数,并在匹配到相应的路由时调用它们。

2,Server: Gin 创建并使用 net/http.Server 对象来监听和处理 HTTP 请求。http.Server 是实际负责启动 HTTP 服务并管理请求处理的结构。

Run() 函数正是体现了它如何使用 net/http.Server 对象来监听和处理 HTTP 请求的。

engine 是 Gin 的核心结构,(ServeHTTP方法)它实现了 http.Handler 接口,这意味着它可以作为 http.ListenAndServe 的处理器 (Handler)。

当 Run() 中调用 ListenAndServe 方法时,服务器开始监听指定地址上的 HTTP 请求,并且每当有请求到达时,它就会通过 Gin Engine 来处理这个请求,执行与请求 URL 匹配的路由处理函数。

因此,通过 Run 函数,Gin 实际上是创建了一个 http.Server 实例,并配置了必要的参数(如监听地址、读写超时时间、最大头部大小等),然后启动服务器来监听和处理 HTTP 请求。

3,Middleware: Gin 的中间件机制是通过包装 net/http.Handler 接口实现的。

中间件函数接收一个 Handler 并返回一个新的 Handler,这样就可以形成一个处理链。当请求到达时,中间件会依次调用下一个处理程序,直到链结束。

4,Routing: Gin 提供了一套更高级的路由系统,它允许通过简洁的语法定义路由,并支持参数和路由组。

尽管如此,底层的路由匹配和请求处理还是委托给 net/http 的 ServeMux。

5,Error handling: Gin 在处理请求时,可以捕获错误并通过 ResponseWriter 返回适当的 HTTP 状态码。

这通常涉及到对 net/http.ResponseWriter 的包装,以便添加额外的功能,如追踪错误或自定义响应。

6,Request and Response: Gin 继承了 net/http 中的 Request 和 ResponseWriter 接口,提供了扩展的 API,使操作请求和响应更加方便,例如解析请求体、获取查询参数和设置响应头等。

7,Custom error handling: Gin 可以注册自定义的错误处理器,这些处理器会在发生错误时被调用,这在 net/http 中不是直接支持的。

总之,Gin 利用了 net/http 包提供的基础架构,通过在其上添加额外的抽象和便利功能,构建了一个功能丰富的Web框架。

Link:https://www.cnblogs.com/farwish/p/18207001

相关推荐
码上淘金5 小时前
在 YAML 中如何将 JSON 对象作为字符串整体赋值?——兼谈 Go Template 中的 fromJson 使用
java·golang·json
小生凡一12 小时前
图解|Go语言实现 Agent|LLM+MCP+RAG
开发语言·后端·golang
pipip.14 小时前
Go原生高性能内存网关IMS,比Redis更快
开发语言·redis·golang
q***062916 小时前
环境安装与配置:全面了解 Go 语言的安装与设置
开发语言·后端·golang
月屯19 小时前
平台消息推送(go)
数据库·后端·golang·cocoa·iphone·gin
百锦再1 天前
第11章 泛型、trait与生命周期
android·网络·人工智能·python·golang·rust·go
hweiyu001 天前
Go Fiber 简介
开发语言·后端·golang
周杰伦_Jay1 天前
【智能体(Agent)技术深度解析】从架构到实现细节,核心是实现“感知环境→处理信息→决策行动→影响环境”的闭环
人工智能·机器学习·微服务·架构·golang·数据挖掘
天使街23号1 天前
go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持
开发语言·后端·golang
雨中散步撒哈拉1 天前
16、做中学 | 初三上期 Golang面向对象_进阶
爬虫·python·golang