5.3 KiB
5.3 KiB
任务清单:Gin 到 Echo 迁移
-
1. 配置文件 (无代码依赖)
- 修改
config.yml中mode配置项的注释,将 "Gin 运行模式" 改为 "服务运行模式"。 - 修改
config.example.yml中mode配置项的注释,保持与config.yml一致。
- 修改
-
2. 控制器辅助函数 (最基础的依赖)
internal/app/controller/response.go- 将
*gin.Context参数全部替换为echo.Context。 - 修改
SendResponse和SendErrorResponse等函数,使其不再直接写入响应,而是返回error,并在内部调用c.JSON(...)。
- 将
internal/app/controller/auth_utils.go- 将
*gin.Context参数全部替换为echo.Context。 - 适配
Get...FromContext系列函数,使用c.Get("key")提取数据。
- 将
-
3. 中间件 (
internal/app/middleware)auth.go- 将
import "github.com/gin-gonic/gin"替换为import "github.com/labstack/echo/v4"。 - 将中间件函数签名从
func AuthMiddleware(...) gin.HandlerFunc更新为func AuthMiddleware(...) echo.MiddlewareFunc。 - 适配中间件内部逻辑,将
func(c *gin.Context)改造为func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { ... } }的结构。 - 将
c.AbortWithStatusJSON(...)调用替换为return controller.SendErrorResponse(...)。 - 在逻辑正常通过的末尾,调用
return next(c)。
- 将
audit.go- 将
import "github.com/gin-gonic/gin"替换为import "github.com/labstack/echo/v4"。 - 将中间件函数签名从
func AuditMiddleware(...) gin.HandlerFunc更新为func AuditMiddleware(...) echo.MiddlewareFunc。 - 适配中间件内部逻辑,将
func(c *gin.Context)改造为func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { ... } }的结构。 - 在调用
next(c)之前和之后,使用c.Get(...)来获取和处理审计信息。 - 在逻辑正常通过的末尾,调用
return next(c)。
- 将
-
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.gointernal/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. 核心 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())。
- 将
- 将
-
6. 依赖管理
- 在
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清理依赖项。
- 在
-
7. 验证
- 运行
go build ./...确保项目能够成功编译。 - 启动服务,手动测试所有 API 端点,验证功能是否与迁移前一致。
- 访问
/swagger/index.html,确认 Swagger UI 是否正常工作。 - (可选) 访问
/debug/pprof/,确认 pprof 路由是否正常。
- 运行