当前位置: 首页 > news >正文

gin 框架 - 教程

gin 框架 - 教程

gin 本人脚手架 github 地址: https://github.com/jacinli/gin-api-template

介绍

Gin 是一个用 Go(Golang)编写的高性能 Web 框架,以其 轻量、快速、优雅 而受到 Go 开发者广泛欢迎。

它的 API 类似于 Python 的 Flask 和 Node.js 的 Express,非常适合用来构建 RESTful API 服务、微服务接口,甚至是中小型网站。

✅ Gin 的核心优势

特性说明
? 高性能使用 httprouter 做底层路由引擎,性能比 net/http 快 40 倍以上
? 中间件支持提供清晰的中间件机制,支持自定义日志、跨域、认证、限流等功能
? 开发友好提供丰富的 API、错误处理、参数绑定、JSON 输出、路由分组等常用功能
? 成熟稳定GitHub Star 超 70k,已在大量生产环境中广泛使用
? 生态丰富与 Swagger、JWT、Gorm、Zap 等常用库无缝集成

?️ 常见的 Gin 应用场景

示例代码

package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.Run() // 默认监听 :8080
}

只需几行代码就能启动一个 HTTP 服务,快速响应请求,是学习和实战 Go 后端开发的极佳起点。

容器化适配

Go 和容器(特别是 Docker)天然适配,是现代云原生生态的“默认语言”,而这背后的技术与生态原因密切相关。

✅ 1. Docker/Kubernetes 就是用 Go 写的

? 所以,容器的普及必然带动 Go 的流行和就业需求

✅ 2. Go 非常适合容器化部署

特性说明
? 无运行时依赖Go 编译出的可执行文件是 静态链接,放进容器直接运行,无需安装 Python、JVM 等
? 简化构建镜像构建出的二进制文件很小(几十 MB),可直接用 scratch 或 alpine 构建极小镜像
⏱️ 启动超快秒级或毫秒级启动,特别适合在容器中弹性扩容场景
⚙️ 易于部署单一文件、跨平台编译,非常适合 CI/CD + 容器化交付

✅ 3. 云原生生态需要并发、效率、易部署,而 Go 正好满足

同步风格与并发处理

Gin 是同步的编程模型,但它内部是通过 goroutine 并发处理每个请求的,结合 Go 本身的并发特性来实现高并发性能。

func(c *gin.Context) {
// 看起来就是同步写法
data := doSomething()
c.JSON(200, data)
}

这种是 同步编程模型,跟 Python 的 Flask 或 Node.js 的 Express 非常像,写法线性、易读、直观

✅ 2. Gin 是“并发处理每个请求”的(基于 goroutine)

虽然代码是同步写的,但你每发一个 HTTP 请求,Gin 框架背后的 http.ListenAndServe() 会为每个连接启动一个 goroutine,因此它是:

✨ 同步风格编程 + 并发处理请求

所以 Gin 的高并发本质依赖的是 Go 的并发模型 goroutine,而不是你手动开启协程。

Gin 的底层是基于 goroutine(Go 的协程)来并发处理每个 HTTP 请求的

http.ListenAndServe(":8080", router)
for {
conn, _ := listener.Accept()
go handleConnection(conn) // 每个请求都会启动一个 goroutine
}

所以:

  • 每一个请求都会由一个 goroutine 来处理
  • 你写的 func(c *gin.Context) 会在这个 goroutine 里被调用
  • Gin 不需要你手动创建协程,它自己托管了并发处理
r.GET("/sleep", func(c *gin.Context) {
time.Sleep(3 * time.Second)
c.String(200, "done sleeping")
})
r.GET("/fast", func(c *gin.Context) {
c.String(200, "fast response")
})

同时访问这两个接口:

  • /fast 不会被 /sleep 阻塞
  • 因为每个请求都有自己的 goroutine,同时运行
特性Go (Gin) 表现
请求隔离每个请求一个 goroutine
开销低goroutine ≠ thread,调度轻量
写法直观同步风格编写逻辑清晰
可扩展性强支持百万连接(理论上)

Gin 写法是同步的,底层是异步的(goroutine),你享受了同步编程的简单 + goroutine 的高并发性能


Gin(Go) VS FastAPI(Python)并发模型

对比项Gin (Go)FastAPI (Python)
并发机制Go 的 goroutine(协程)Python 的 asyncio event loop(事件循环)
写法同步写法(不用 go 也能并发)显式异步:必须用 async def + await 才是非阻塞
性能并发极强,协程调度由 Go runtime 接管,极低开销asyncio 高并发也不错,但遇到阻塞 IO 容易“假死”
异步原语go doTask(),系统调度async def do_task(): await xxx(),事件驱动调度
是否易用✅ 写法同步,底层异步,学习曲线低❗必须了解 await 的原理,阻塞函数一旦混入会拖垮整个服务
是否线程安全goroutine 隔离强,注意共享资源并发coroutine 是协作式,单线程事件循环(除非配合 uvicorn --workers)
响应性能更适合高吞吐 / I/O 并发(代理、API 网关)更适合 I/O 密集,性能受限于 Python 单线程特性(GIL)
r.GET("/ping", func(c *gin.Context) {
// 同步写法
time.Sleep(2 * time.Second)
c.String(200, "pong")
})
@app.get("/ping")
async def ping():
await asyncio.sleep(2)
return {"message": "pong"}

❗ 注意:FastAPI 如果你用 time.sleep(2) 而不是 await asyncio.sleep(2),会直接阻塞整个服务!

  • Go 本身就是“并发优先”的语言,不需要 async/await 的复杂性
  • FastAPI 虽然非常现代,但受限于 Python 本身的执行模型(GIL、线程模型)

FastAPI 用的是“显式异步” + 单线程协程调度;Gin 用的是“隐式并发” + goroutine 自动调度,写法简单但性能极强。

http://www.hskmm.com/?act=detail&tid=25513

相关文章:

  • 赛前训练 5 树形 dp
  • 递推求解逆元
  • 一些做题记录(2025 2-3)
  • 智慧决策的透明化路径:“空白金兰契”架构下的“悟空备案制”研究
  • 笔记:寻找适合自己的简历工具(YAMLResume)
  • 实用指南:Linux 权限管理入门:从基础到实践
  • vue插槽
  • Magnet Axiom 9.6 新增功能概览 - 数字取证与分析
  • Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 9 月发布)
  • Windows 11 25H2 正式版发布,新增功能简介
  • 无法定时发送
  • 计算能力的重要性:从内存配置到进程迁移的未来展望
  • MongoDB财报超预期,文档数据库技术解析
  • 深入解析:【RabbitMQ】- Channel和Delivery Tag机制
  • 2020CSPS T1 儒略日题解
  • 调用百度AI接口实现网络图片中的文字识别
  • 英语_阅读_ChatGPT_待读
  • 实用指南:React 组件异常捕获机制详解
  • win11 为什么我的程序断网就转入导后台进程
  • 深入解析:AI与区块链:数据确权与模型共享的未来
  • 10.6阅读笔记
  • hetao 国庆
  • 详细介绍:运维 pgsql 安装完后某次启动不了
  • visual studio
  • [MCP] StreamableHTTPServer
  • 牛客 周赛109 20250924
  • 罗技G102螺丝型号
  • 详细介绍:深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制
  • 英语_阅读_Let your baby go_待读
  • 第三章习题