5.3 KiB
5.3 KiB
任务清单:Gin 到 Echo 迁移
-
1. 配置文件 (无代码依赖)
- 修改
config.yml中mode配置项的注释,将 "Gin 运行模式" 改为 "服务运行模式"。 - 修改
config.example.yml中mode配置项的注释,保持与config.yml一致。
- 修改
-
2. 控制器辅助函数 (最基础的依赖)
internal/infra/models/execution.go- 添加
ContextAuditStatus和ContextAuditResultDetails常量。
- 添加
internal/app/controller/response.go- 将
*gin.Context参数全部替换为echo.Context。 - 修改响应函数,使其返回
error。 - 新增
SendErrorWithStatus函数,用于在中间件等场景下发送带有特定HTTP状态码的错误响应。 - 重构
setAuditDetails函数,使其成为统一设置所有审计信息(包括操作状态和结果详情)的唯一入口。 - 更新
SendSuccessWithAudit和SendErrorWithAudit以调用重构后的setAuditDetails。
- 将
internal/app/controller/auth_utils.go- 将
*gin.Context参数全部替换为echo.Context。 - 适配
Get...FromContext系列函数,使用c.Get("key")提取数据。
- 将
-
3. 中间件 (
internal/app/middleware)auth.go- 迁移到 Echo 中间件格式。
- 使用
controller.SendErrorWithStatus在认证失败时返回401或500HTTP状态码。
audit.go- 极大简化并迁移到 Echo 中间件格式。
- 移除所有响应体捕获和解析的逻辑 (
bodyLogWriter,auditResponse等)。 - 在
next(c)调用后,直接从echo.Context中获取由response.go设置好的最终审计状态和结果详情。
-
4. 控制器 (
internal/app/controller/...)- 通用修改:对所有控制器文件执行以下操作:
- 将
import "github.com/gin-gonic/gin"替换为import "github.com/labstack/echo/v4"。 - 将所有处理函数签名从
func(c *gin.Context)修改为func(c echo.Context) error。 - 将
c.ShouldBindJSON(&req)或c.ShouldBindQuery(&req)替换为if err := c.Bind(&req); err != nil { ... }。 - 将
c.Param("id")替换为c.Param("id")(用法相同,检查返回值即可)。 - 将
controller.SendResponse(c, ...)和controller.SendErrorResponse(c, ...)调用修改为return controller.SendResponse(c, ...)和return controller.SendErrorResponse(c, ...)。
- 将
- 文件清单 (按依赖顺序建议):
internal/app/controller/management/controller_helpers.go(注意:其中的泛型辅助函数也需要修改为返回error)internal/app/controller/device/device_controller.gointernal/app/controller/management/pig_farm_controller.gointernal/app/controller/management/pig_batch_controller.gointernal/app/controller/management/pig_batch_health_controller.gointernal/app/controller/management/pig_batch_trade_controller.gointernal/app/controller/management/pig_batch_transfer_controller.gointernal/app/controller/monitor/monitor_controller.gointernal/app/controller/plan/plan_controller.gointernal/app/controller/user/user_controller.go
- 通用修改:对所有控制器文件执行以下操作:
-
5. DTO 结构体注解
- 检查并修改
internal/app/dto包下所有结构体的注解。将所有 Gin 相关的注解(例如binding:"...")替换为 Echo 兼容的注解(例如validate:"...")。json:"..."标签通常保持不变。
- 检查并修改
-
6. 核心 API 层 (
internal/app/api)router.go- 将所有
router.GET,router.POST等 Gin 路由注册方法替换为 Echo 的e.GET,e.POST等方法。 - 将 Swagger 路由
router.GET("/swagger/*", ginSwagger.WrapHandler(swaggerFiles.Handler))替换为e.GET("/swagger/*", echoSwagger.WrapHandler)。 - 将 pprof 路由的
gin.WrapH和gin.WrapF调用替换为echo.WrapHandler和echo.WrapFunc。
- 将所有
api.go- 将
engine *gin.Engine替换为engine *echo.Echo。 - 更新
NewAPI函数:- 将
gin.SetMode(cfg.Mode)替换为e.Debug = (cfg.Mode == "debug")。 - 将
gin.New()替换为echo.New()。 - 将
engine.Use(gin.Recovery())替换为e.Use(middleware.Recover())。
- 将
- 将
-
7. 依赖管理
- 在
go.mod中移除github.com/gin-gonic/gin。 - 在
go.mod中移除github.com/swaggo/gin-swagger。 - 在
go.mod中添加github.com/labstack/echo/v4。 - 在
go.mod中添加github.com/swaggo/echo-swagger。 - 执行
go mod tidy清理依赖项。
- 在
-
8. 验证
- 运行
go build ./...确保项目能够成功编译。 - 启动服务,手动测试所有 API 端点,验证功能是否与迁移前一致。
- 访问
/swagger/index.html,确认 Swagger UI 是否正常工作。 - (可选) 访问
/debug/pprof/,确认 pprof 路由是否正常。
- 运行