type
status
date
slug
summary
tags
category
icon
password
首先先要初始化go modules:
go mod init your_project_name
然后通过命令下载gin
go get -u github.com/gin-gonic/gin
可以用代理快一点: go env -w GOPROXY=https://goproxy.cn,direct
先用一个简单的来跑一下,了解一下是怎么样的:
带路径参数的:
处理查询参数
中间件
想象你是一个餐厅服务员,负责记录客人的用餐情况。这段代码就像是你的工作流程:
- t := time.Now()
这就像你看了一眼时钟,记下客人进店的时间。
- c.Set("example", "12345")
这就像你在客人的单子上写下了他们的桌号(比如 12345)。
c.Next()这相当于你让厨房开始准备食物,而你去招呼其他客人了。
- latency := time.Since(t)
客人吃完后,你再看一眼时钟,计算他们在餐厅待了多长时间。5. status := c.Writer.Status()这就像你记录客人是否满意(比如 200 表示很满意,404 表示菜品缺货等)。
- example := c.MustGet("example").(string)
这相当于你再次查看单子,确认桌号。.MustGet 就是你坚信桌号一定写在单子上,.(string) 则是确认这个桌号是用数字写的。整个过程就是:
- 记录客人来的时间
- 记下他们的桌号
- 让厨房准备食物
4. 等食物准备好,客人吃完
- 计算客人在餐厅待的时间
- 记录客人的满意度
- 再次确认桌号
这个"服务员"(中间件)不仅记录了整个用餐过程,还能在需要的时候查看之前记录的信息(比如桌号)。这样,餐厅的其他工作人员也能获取这些信息,保证服务的连贯性。
r.Use(Logger())意思就是:
- 中间件的应用:
r.Use(Logger()) 告诉 Gin 框架在处理任何请求之前都要先运行 Logger() 中间件。
- 全局中间件:
这种方式应用的中间件是全局的,意味着它会对所有的路由生效。3. 执行顺序:
- 当一个请求到达时,首先会执行这个 Logger() 中间件。
- 然后才会执行特定路由的处理函数。
- 中间件的作用:
在这个例子中,Logger() 中间件会记录每个请求的处理时间和状态码
基于gin的todoList也完成
首先是一般都是用default的模板比较方便。
然后看看这几个restful 风格的api是怎么样的,要注意点的其实不多。
基于这个ERMS项目的代码结构,我来总结一下Gin框架项目的标准文件夹和文件格式规范:
标准Gin项目目录结构
1. 顶层目录结构
2. API服务内部结构
3. Handler目录结构(按业务模块组织)
文件命名规范
1. Go文件命名
2. 目录命名
标准文件结构模式
1. 路由文件模式 (route.go)
2. Handler文件模式 (具体业务逻辑)
3. 主程序文件模式 (main.go)
代码组织最佳实践
1. 包导入顺序
2. 错误处理模式
3. 常量定义模式
4. 结构体定义模式
文件大小和复杂度控制
参考这个项目的实践:
- route.go: 通常 50-100 行,只负责路由注册
- handler文件: 200-500 行,单个业务模块的所有操作
- main.go: 50-100 行,简洁的启动逻辑
- 超大文件处理: 如
logs.go
(1841行),按功能分组但保持在同一文件中
配置和环境
配置文件结构
这种结构的优势:
- ✅ 模块化清晰:按业务领域组织
- ✅ 职责分离:路由、处理器、中间件分离
- ✅ 易于维护:每个文件职责单一
- ✅ 团队协作友好:不同开发者可以并行开发不同模块