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
Gin 框架是怎么使用 net http 包的(gin.go)的更多相关文章
- gin框架学习手册
前言 gin框架是go语言的一个框架,框架的github地址是:https://github.com/gin-gonic/gin 转载本文,请标注原文地址:https://www.cnblogs.co ...
- 使用zap接收gin框架默认的日志并配置日志归档
目录 使用zap接收gin框架默认的日志并配置日志归档 gin默认的中间件 基于zap的中间件 在gin项目中使用zap 使用zap接收gin框架默认的日志并配置日志归档 本文介绍了在基于gin框架开 ...
- Gin框架介绍及使用
Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...
- [go]gin框架
gin参考 Gin框架返回值 // 返回json func main() { r := gin.Default() //方法一: 自己拼接json // gin.H is a shortcut for ...
- 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证
本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理. 小程序登陆逻辑 小程序的 ...
- Gin框架源码解析
Gin框架源码解析 Gin框架是golang的一个常用的web框架,最近一个项目中需要使用到它,所以对这个框架进行了学习.gin包非常短小精悍,不过主要包含的路由,中间件,日志都有了.我们可以追着代码 ...
- Gin框架使用详解
1.什么是Gin Gin是go编写的一个web应用框架. 2.Gin安装 go get github.com/gin-gonic/gin 3.Gin使用示例 package main import ( ...
- Gin 框架 - 安装和路由配置
目录 概述 Gin 安装 路由配置 推荐阅读 概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 ...
- Gin 框架 - 使用 logrus 进行日志记录
目录 概述 日志格式 Logrus 使用 推荐阅读 概述 上篇文章分享了 Gin 框架的路由配置,这篇文章分享日志记录. 查了很多资料,Go 的日志记录用的最多的还是 github.com/sirup ...
- [系列] Gin框架 - 数据绑定和验证
目录 概述 推荐阅读 概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方 ...
随机推荐
- SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQL MIN() 和 MAX() 函数 SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别.以下是它们的用法和示例: MIN() 函数 MIN()函数返回所选列的最小值. ...
- 在Mac系统上使用Qt调用摄像头不出图解决方法
需求:在Mac系统上,调用摄像头,实现旋转.缩放.处理视频帧等功能 问题:使用获取视频帧的方法,在Mac上调不起来摄像头 解决方法: 将视频窗口(QVideoWidget)和视频帧(QVideoFra ...
- Scrapy 基础入门
0x01 框架概述 Scrapy 是基于 Python 的一个非常流行的网络爬虫框架,可以用来抓取 Web 站点并从页面中提取结构化的数据 (1)核心组件 引擎:用来控制整个系统的数据处理流程 调度器 ...
- CentOS添加一个新的硬盘分区到挂载的过程
1.分区 分区工具fdisk用法介绍 fdisk命令参数介绍 p.打印分区表. n.新建一个新分区. d.删除一个分区. q.退出不保存. w.把分区写进分区表,保 ...
- 重新点亮linux 命令树————网络配置的查看[十一三]
前言 简单整理一下网络配置. 正文 通过ifconfig 查看. 这个就是ip地址. 网卡mac地址. 还有一块信息非常重要: 这个io开头的信息,这里面就是我们127.0.0.1的信息. 那么就来演 ...
- .NET开源强大、易于使用的缓存框架 - FusionCache
前言 缓存在程序中扮演着提升性能.降低资源消耗.改善用户体验等重要角色,是构建高效.可伸缩.稳定的系统不可或缺的重要组成部分.今天大姚给大家分享一款.NET开源(基于MIT license).强大.易 ...
- 《c#高级编程》第4章C#4.0中的更改(七)——命名参数和可选参数
一.概念 C#中的命名参数和可选参数是两种函数参数的特殊形式,它们可以提高代码的可读性和灵活性. 命名参数 命名参数允许我们在调用函数时指定参数名称,从而不必按照函数定义时的参数顺序进行传参.这样做可 ...
- Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分析
QTransform 用于图形绘制,它定义了如何平移(translate).缩放(scale).切变(shear).旋转(rotate)或投射(project)坐标系.注意:QTransform 是作 ...
- Llama 3 开源了「GitHub 热点速览」
近日,Meta(原 Facebook)开源了他们公司的新一代大模型 Llama 3,虽然目前只放出了 8B 和 70B 两个版本,但是在评估结果上已经优于 Claude 3 Sonnet.Mistra ...
- 力扣1(java&python)-两数之和(简单)
题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...