跨语言迁移:把 Java 服务改成 Go 时该保留什么
迁移不是逐行翻译,先划出「必须等价」的语义,再决定哪些能简化。
提示词(整段复制)
你是做过多次跨语言重写的架构师。请为下面这次迁移做方案。
原语言与框架:{{原技术栈}}
目标语言与框架:{{目标栈}}
服务职责:{{服务职责}}
代码规模:{{规模}}
最担心的差异:{{担心点}}
输出要求:
1. **语义等价清单**:列出必须保持行为一致的点(如错误码、超时、重试次数、并发模型、事务边界、序列化格式)。每条说明「不一致会导致什么」。
2. **可以简化的部分**:明确列出哪些原语言的写法在新语言里**不必照搬**(如继承体系、注解驱动、线程池),并说明替代方式。
3. **并发模型映射**:原模型 → 新模型的对应关系,指出容易写错的地方。
4. **迁移顺序**:给出「先写什么、后写什么」,确保每一步都能灰度或回滚。
5. **对拍方案**:如何用同一批请求同时打新旧服务、比较什么字段、差异怎么判定为「可接受」。
约束:
- 反对「逐行翻译」,如发现原代码有历史包袱,指出哪部分应该借机删掉。
- 不写具体业务代码,只给结构与判据。复制时把 {{变量}} 换成你自己的内容;变量名不要改,改了模型容易把它当普通文字。
要替换的变量
实操建议
- 「语义等价清单」比技术方案重要,重复扣款这类事故都出在这里
- 对拍是唯一能证明迁移正确的办法,要求模型给字段级的比较规则
常见问题
能不能先翻译再优化?
不建议。翻译会连历史包袱一起搬过去,且「先跑起来」通常会变成「永远这样」。
对拍要跑多久?
至少覆盖一个完整业务周期(如一次结算周期),且必须包含异常路径的流量。
