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)的更多相关文章

  1. gin框架学习手册

    前言 gin框架是go语言的一个框架,框架的github地址是:https://github.com/gin-gonic/gin 转载本文,请标注原文地址:https://www.cnblogs.co ...

  2. 使用zap接收gin框架默认的日志并配置日志归档

    目录 使用zap接收gin框架默认的日志并配置日志归档 gin默认的中间件 基于zap的中间件 在gin项目中使用zap 使用zap接收gin框架默认的日志并配置日志归档 本文介绍了在基于gin框架开 ...

  3. Gin框架介绍及使用

    Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...

  4. [go]gin框架

    gin参考 Gin框架返回值 // 返回json func main() { r := gin.Default() //方法一: 自己拼接json // gin.H is a shortcut for ...

  5. 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证

    本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理. 小程序登陆逻辑 小程序的 ...

  6. Gin框架源码解析

    Gin框架源码解析 Gin框架是golang的一个常用的web框架,最近一个项目中需要使用到它,所以对这个框架进行了学习.gin包非常短小精悍,不过主要包含的路由,中间件,日志都有了.我们可以追着代码 ...

  7. Gin框架使用详解

    1.什么是Gin Gin是go编写的一个web应用框架. 2.Gin安装 go get github.com/gin-gonic/gin 3.Gin使用示例 package main import ( ...

  8. Gin 框架 - 安装和路由配置

    目录 概述 Gin 安装 路由配置 推荐阅读 概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 ...

  9. Gin 框架 - 使用 logrus 进行日志记录

    目录 概述 日志格式 Logrus 使用 推荐阅读 概述 上篇文章分享了 Gin 框架的路由配置,这篇文章分享日志记录. 查了很多资料,Go 的日志记录用的最多的还是 github.com/sirup ...

  10. [系列] Gin框架 - 数据绑定和验证

    目录 概述 推荐阅读 概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方 ...

随机推荐

  1. std::string 拼接字符串

    #include <iostream> #include <string> #include <sstream> int main() { // 方法一:12345 ...

  2. C++ 获取数组大小、多维数组操作详解

    获取数组的大小 要获取数组的大小,可以使用 sizeof() 运算符: 示例 int myNumbers[5] = {10, 20, 30, 40, 50}; cout << sizeof ...

  3. mask2former出来的灰度图转切割轮廓后的二值图

    切割后的灰度图 转成二值图代码如下 点击查看代码 # This is a sample Python script. import cv2 import numpy as np # Press Shi ...

  4. CSS 布局专题

    0x01 浮动布局 (1)常见网页布局 顶部商标栏(Logo):展示网站的标志.名称以及具有代表性的图片 导航栏(Navigation):展示网站大概的分类 左侧边栏(Left-side Bar):展 ...

  5. 重新点亮shell————sed其他命令[十一]

    前言 简单介绍一下其他增删查. 正文 删除命令: 例子: 插入和更改: 例子i: 例子c: 读文件和写文件: 例子r: 下一行命令: 打印: 例子: 只想输出匹配的行: 退出命令: 前面的运行效率更高 ...

  6. 实训篇-Html-计算器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 【Oracle】使用case when语句导致SQL查询速度很慢的情况

    [Oracle]使用case when语句导致SQL查询速度很慢的情况 很多时候会使用到case when语句去对SQL的多种情况进行处理,decode也用的多,但是通常decode会用在固定值的数据 ...

  8. 力扣495(java)-提莫攻击(简单)

    题目: 在<英雄联盟>的世界中,有一个叫 "提莫" 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态.现在,给出提莫对艾希的攻击时间序列和提莫攻击的中 ...

  9. 力扣575(java&python)-分糖果(简单)

    题目: Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] .Alice 注意到她的体重正在增长,所以前去拜访了一位医生. 医生建议 Alice 要少摄入糖分,只吃掉她所有糖 ...

  10. ATC'22顶会论文RunD:高密高并发的轻量级 Serverless 安全容器运行时 | 龙蜥技术

    简介: RunD可以在88毫秒内启动,并且在104核384GB内存的单节点上每秒启动超过200个安全容器. 编者按:目前的安全容器软件栈 - 包括 host 操作系统中的 cgroup.guest 操 ...