为什么选择Gin框架?
Gin 是一个基于 Go 语言的高性能 Web 框架,具备以下优势:
- 轻量高效:底层依赖 net/http,性能接近原生。
- 简洁优雅:API 设计友好,支持路由分组、中间件链、参数绑定等特性。
- 生态丰富:内置 JSON 解析、日志记录、错误恢复等实用功能,社区插件生态完善。
- 无论是构建 RESTful API 还是全栈应用,Gin 都能显著提升开发效率。
安装
要安装Gin软件包,您需要安装Go并首先设置Go工作区。
- 首先需要安装Go(需要1.10+版本),然后可以使用下面的Go命令安装Gin。
- 将其导入您的代码中:
基础示例
运行后访问 http://localhost:8080,即可看到返回的字符串。
Gin工工作作流流程
核心概念
- Engine 容器对象,整个框架的基础
- Engine.tree 负责存储路由和handle方法的映射,采用类似于字典树的结构
- Engine.RouterGroup 其中handlers存储着所有中间件
- Context 上下文对象,负责处理 请求回应 ,其中handles的存储处理请求时中间件和处理方法的
请求处理 流程
GIN启动流程
Gin原原理解析
参考资料:http://v5blog.cn/pages/dd7d5a/
gin.Default()
Default()跟New()几乎一模一样, 就是调用了gin内置的Logger(), Recovery()中间件
engine := New() 初初始化始化
通过调用 gin.New() 方法来实例化 Engine容器
engine.Use() 注注册册中间件 中间件
路由与参数处理
无参路由
动态路由参数
通过 :param 捕获 URL 中的变量:
(可以通过Context的Param方法来获取API参数)
查询参数
使用 Query 或 DefaultQuery 获取 URL 参数: http://127.0.0.1:8000/user?name=zhangsan
ShouldBind参数绑定
通过 ShouldBind 自动解析请求体(支持 JSON、Form 等):
我们可以基于请求的 Content-Type 识别请求数据类型并利用反射机制
自动提取请求中 QueryString 、 form表单 、 JSON 、 XML 等参数到结构体中
完整代码案例
路由分发
为什么需要路由分发?
- 我们一个项目有非常多的模块,如果全部写在一块导致代码结构混乱,不利于后续的扩展
- 按照大的模块,每个模块有自己独立的路由,主路由可以再main.go中进行注册
项目结构
main.go
routers/users.go
routers/books.go
中间件
- Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。
- 这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑
- 比如登录认证、权限校验、数据分页、记录日志、耗时统计等
全局中间件
局部中间件
next()方法
- 在中间件中调用next()方法,会从next()方法调用的地方跳转到Handler函数
- Handler函数执行完成,若中间件还有部分代码未执行(中间件中next()之后的代码),则执行该代码
实现token认证
- http://127.0.0.1:8080/index index首页无需token直接访问
- http://127.0.0.1:8080/home home家目录需要对token进行验证,验证通过才可访问