从 Gin 迁移到 Hertz:一次渐进式重构实战
TL;DR — 这次迁移不是“把 import 从 gin 改成 hertz”这么简单,而是一次分层完成的渐进式重构:先抽离 transport 层,再做 Gin 兼容层,最后把热点路由和关键中间件原生化到 Hertz。中间我们甚至短暂用 Fiber 验证过 fallback 方案。最重要的收获不是“换了框架”,而是沉淀出一套对存量 Go 服务可复制的迁移方法。
TL;DR — 这次迁移不是“把 import 从 gin 改成 hertz”这么简单,而是一次分层完成的渐进式重构:先抽离 transport 层,再做 Gin 兼容层,最后把热点路由和关键中间件原生化到 Hertz。中间我们甚至短暂用 Fiber 验证过 fallback 方案。最重要的收获不是“换了框架”,而是沉淀出一套对存量 Go 服务可复制的迁移方法。
TL;DR — 为已有项目新增第二种数据库支持,工作量远大于”加个驱动依赖”。
本文记录 ppanel-server 从 MySQL-only 到同时支持 MySQL + PostgreSQL 的完整改造:重构配置抽象层、拆分两套迁移 DDL、修复 model 层 20+ 个 MySQL 专属写法、顺带优化搜索索引。
涉及 2 个 PR、6 次提交、约 40 个文件改动。最有价值的发现是:引入异构数据库测试,意外暴露了一个 MySQL 下潜伏了半年的隐性 bug。