在云原生与高性能服务的发展趋势下,Go 项目迁移到 Rust 项目成为提升性能和稳定性的最重要优化方向,但依赖复杂、有语言门槛等问题长期制约着 Go2Rust 的大规模落地。字节跳动服务框架团队基于内部大量迁移实践,融合大模型能力与工程经验,推出「半空」富脚手架模式,将迁移从"人工主导"转变为"标准化流程",为需要进行 Go2Rust 迁移的团队提供了一套可落地的技术参考。
本文基于字节跳动服务框架团队研发工程师范广宇在 CloudWeGo 四周年技术沙龙上的演讲内容整理,详细拆解了「半空」富脚手架模式的设计逻辑、实施步骤与实践成效。
点击链接可查看本次分享回放👉🏻b23.tv/v7rRu7D
一、从 Go 到 Rust:不止于性能的追求
字节跳动内部的多个项目实践已经证明,将 Golang 服务迁移至 Rust,不仅能带来显著的 CPU 性能提升,还能有效增强服务稳定性、降低运维成本。这背后,是 Rust 语言本身在内存安全和高并发处理上的独特优势。

为了让更多业务团队享受到迁移带来的红利,服务框架团队探索出两条路径:
-
间接优化 :让 Golang 服务无需改造代码,即可间接获得 Rust 的性能优势。关于ROG 技术剖析和业务落地,可以点击观看视频:b23.tv/35jPPMg
-
完全迁移:通过自动化方案,将业务代码完全迁移至 Rust,实现更彻底的性能飞跃。
「半空」富脚手架模式,正是为实现第二条路径------规模化、低门槛的完全迁移------而生。

二、迁移面临的三大挑战
尽管 Go2Rust 的价值显而易见,但长久以来,大规模落地始终面临着三大挑战:
-
陡峭的学习曲线:Rust 独特的所有权、生命周期等概念,对习惯了 Golang 的工程师来说,无疑是一道不低的门槛。这使得许多团队在迁移面前望而却步。
-
复杂的依赖黑洞:一个 Golang 项目,其直接和间接依赖往往构成一个庞大的依赖树。依赖的层级越深,迁移的复杂度就越高,甚至呈指数级增长。如何有效管理和迁移这些依赖,是一个棘手的问题。
-
不可控的翻译质量:单纯依赖大模型进行代码翻译,结果往往充满不确定性。生成的"Go 味" Rust 代码,不仅风格怪异,更难以满足生产环境对代码质量的严苛要求。
为了跨越这些鸿沟,服务框架团队的迁移模式也经历了持续的演进:从完全依赖人工经验的"作坊式"迁移,到利用工具辅助的"渐进式"翻译,再到如今将迁移升级为"标准化流程"的「半空」富脚手架模式。
三、「半空」富脚手架:三步走的标准化迁移流程
「半空」富脚手架的核心,是将复杂、高度依赖人工经验的迁移过程,抽象、封装成一个标准化的三步流程。它以 IDE 插件的形式提供服务,接收用户的 Golang 项目,输出一个 100% 可编译、保留完整业务逻辑的 Rust 脚手架,彻底将工程师从繁琐的"体力活"中解放出来。 这套流程完全复刻了资深工程师进行手动迁移时的心智模型,分为翻译前、翻译中、翻译后三个阶段。

第一步:翻译前 ------ 运筹帷幄,绘制精准迁移蓝图
如同建造大楼前需要有精确的施工图纸,「半空」在启动翻译前,会进行一次彻底的"项目体检",为后续的自动化迁移绘制清晰的路径。
-
项目深度理解文档:自动解析项目并生成完整的项目梳理文档,涵盖整体架构、接口定义、函数逻辑、结构体设计等,让工程师对项目全貌有宏观的把握。
-
依赖梳理:系统性地梳理项目的直接与间接依赖,并智能标注出无需翻译的依赖项。这不仅能精确评估迁移的工作量与难度,也让迁移的范围和质量变得清晰可控。
-
接口梳理及规划:对于复杂的微服务项目,工具会自动提取目标接口及其完整的函数调用链,将庞大的业务逻辑拆解为一个个可以独立编译、验证和运行的单元。
第二步:翻译中 ------ 黑盒操作,从"神似"到"形似"的精准转化
准备工作就绪后,工程师只需在熟悉的 IDE 中一键触发,即可启动翻译。
-
基础映射与 IDE****搜集:针对 Kitex 微服务项目,自动完成从 Golang 框架到 Rust 框架的基础结构映射,并自动化搜集下游服务所依赖的 IDL 文件,免去了大量繁杂的手动梳理。
-
"意译"而非"直译":这是「半空」翻译质量的核心保障。它以"节点"为基本单元,采用"意译"的逻辑,深入理解 Golang 代码的业务意图,然后用最符合 Rust 语言习惯和最佳实践的方式来生成代码,从根本上避免了生硬、别扭的"Go 风格 Rust 代码"。

- 智能化的依赖处理 :针对不同类型的依赖,「半空」采取了不同的处理策略:
-
本地依赖:通过递归翻译直接迁移。
-
业务 SDK:标记为递归翻译后,生成对应的 Rust 版本。
-
内部基础组件:建立专门的知识库,映射 Golang 组件在 Rust 中的等效实现与用法。
-
开源组件:优先调用知识库中的成熟方案,当知识库缺失时,再由大模型进行补全。
-
通过自下而上的递归翻译逻辑,从最底层的函数开始,逐个节点完成编译和翻译,最终确保整个接口链路的完整性与可运行性。
第三步:翻译后 ------ 自动优化与辅助校验,守好交付质量最后一关
翻译完成不等于大功告成。为了确保交付的代码能直接进入生产环境,「半空」还提供了一套完善的"售后服务"。
- 基于 LLM Agent 驱动的代码质量优化:一个内置的 Agent 会自动尝试编译生成的 Rust 代码,智能解析编译过程中出现的错误,并进行多轮自我修复。实践证明,这能将代码的初始编译通过率从约 80%~90% 提升至 100% 可直接运行的状态。

- IDE 辅助校验:提供便捷的 IDE 校验插件,支持翻译后的 Rust 代码与原始 Golang 源码的一键跳转、对比查看。这使得工程师可以像 Code Review 一样,快速核对业务逻辑的一致性,确保迁移的准确无误。
内部实践表明,经「半空」处理后的代码,质量已非常接近资深工程师手动编写的水平,真正实现了高质量、低成本的规模化迁移。
四、未来展望:不止于迁移,更重塑研发体验
「半空」富脚手架模式的推出,仅仅是 Go2Rust 工程化探索的第一步。服务框架团队的目标,不止于实现 1:1 的精准翻译,更希望借此重塑 Rust 的研发体验。截至发稿前,「半空」在字节内部已实现万行代码 0 编译错误的翻译交付。

-
引入 Deep Research 架构:在未来,服务框架团队希望「半空」不仅能"翻译"代码,更能"重构"代码。它将能自动将翻译后的代码,重构为更符合 Rust 最佳实践的形态,充分释放 Rust 语言的强大潜力。
-
持续推广优化:服务框架团队将持续扩大「半空」的推广范围,积累更多场景的迁移案例,并建立用户反馈的闭环。通过分析用户对翻译代码的修改,持续、智能地优化翻译流程与代码质量。