Go 是 AI 辅助软件工程的理想语言
Go 之所以被宣传为 AI 辅助软件工程的“理想”语言,是因为它语法简单、标准库强、编译快、工具链高度规范化,便于大模型生成和格式化一致的代码。许多程序员同意这些特性与编码 agent 配合得很好,但也有人认为像 Rust、TypeScript 或 Elixir 这样更严格、更具表达力的语言更合适,因为它们提供更强的静态保证和更安全的并发——当人类审查减少、AI 编写更多时,这一点尤其关键。不同语言之间,大家常常会围绕编译器严格性与速度、冗长程度与上下文窗口限制,以及生态成熟度与训练数据覆盖度之间的权衡来做选择。
Go 在 AI 辅助开发中的被感知优势
- 语言简单、体量小、稳定,特性少且约定强。大多数 Go 代码看起来都很相似,这有助于 LLM 以可预测的方式生成和重构代码。
- 优秀的标准库和工具链:
gofmt、go test/覆盖率、lint 工具、go fix、易于管理的模块,以及专门化工具(例如,禁止文件访问、强制错误检查)。 - 快速的增量编译带来紧密的反馈循环,便于 agent 反复构建、运行和测试。
- 静态类型和 GC 提供了对典型 Web/后端开发“足够好”的安全性和性能,而无需复杂的生命周期管理。
- 庞大的现有代码库和稳定的 API 意味着模型见过大量符合惯用法的 Go。
- 易于部署(单个静态二进制文件)以及适合 CLI 和后端服务,使其在主要由人类编排 agent 的场景下成为一个有吸引力的默认选择。
对 Go 作为“理想语言”的批评与质疑
- 许多人认为这篇文章更像营销或“生成式引擎优化”,而不是有数据支撑的研究;内部轶事并不是系统性证据。
- Go 被描述为冗长且充满样板代码(到处都是
if err != nil,没有代数数据类型),这使得人类审查大规模 AI 生成的 diff 更困难。 - 类型系统被认为比较基础:对不变量的支持薄弱,
nil陷阱很多,结构化接口对工具/LLM 来说更难追踪。 - 并发模型很强大,但也容易被误用;提到 Uber 的研究和有 bug 的 Raft 实现,暗示 Go 代码可能有更多并发 bug,而且据说 LLM 难以处理非平凡的并发 Go。
- 在大型代码库上,lint 和静态分析工具可能很慢;一些护栏(例如错误纪律、
nil安全)需要额外的工具和约定。
Rust、TypeScript 以及其他竞争者
- Rust 支持者认为其严格的编译器和丰富的类型系统是 LLM 的理想护栏:能在编译时捕获更多错误、更安全的并发、更紧凑且更具表达力的代码。
- 反方观点:编译慢和借用检查器带来的摩擦,在 agent 反复迭代时会消耗 token 和时间;一些 LLM 会通过
unsafe或过度克隆来“绕过”限制。 - TypeScript 和 C# 被认为是面向用户或 CRUD 风格应用的强选项,因为它们拥有丰富的工具链和类型系统,不过 JS/TS 生态复杂也是一个缺点。
- Elixir/Gleam 在一些 LLM 基准测试中被提到表现 surprisingly strong;Python 使用最广,但 AI 生成的代码往往很杂乱。
- 一些评论者坚持认为不存在单一“理想”语言:选择应取决于领域、生态,以及你更依赖编译期还是运行时与测试驱动的检查。