
【导读】
最近 Google 开发者官方博客罕见地为一门语言站台:一篇题为《Why Go is an Ideal Language for AI-Assisted Software Engineering》的文章抛出论断——当 AI 能瞬间生成成百上千行代码,"写代码快不快"已经不再重要,"审代码准不准"才是新时代软件工程的核心瓶颈。而 Go 凭借"可读性优先"的哲学,意外成了 AI 辅助编程时代的赢家。文章冲上 Hacker News 热榜,评论区吵成一片。
热闹归热闹,有一个问题却几乎没人提:按文章自己定的那套评价标准,C# 不仅没有输,在好几个维度上还赢得更彻底。 这篇文章我们就按 Google 自己的尺子,把 C# 和 Go 逐条量一遍。
原文的逻辑链条很清晰:
过去衡量一门语言好不好,看的是好不好写——语法简洁不简洁、表达灵活不灵活。但当 AI 编程智能体能在几秒内生成大段语法正确的代码时,人类打字的速度不再是瓶颈,真正卡脖子的变成了:人类如何审查、验证并长期维护这些 AI 生成的代码。
顺着这个逻辑,文章给 Go 总结了四张底牌:
单看这些,Go 确实很香。但问题是——这四条,C# 哪条没有?
Go 有 gofmt、gopls、govulncheck;.NET 这边有 dotnet CLI、dotnet format、NuGet 漏洞审计、内置 Source Generators,还有一个常被低估的大杀器——Roslyn 编译器平台。
Roslyn 不是黑盒编译器,它把 AST、语义模型、数据流分析的 API 全部公开,任何人都可以基于它写分析器和代码修复器。Google 原文里重点吹捧的 "modernizer"(用 go fix 自动把老代码升级为新写法),C# 生态里 Roslyn code fixer + .NET Upgrade Assistant 干同样的事更早、更彻底。
对于"给 AI 提供外部校验"这件事,工具链越深,AI 的自我纠错闭环就越可靠——这一条,C# 是加分项,不是减分项。
公平地说,这是 Go 真正占优的一条。C# 表达力强——LINQ、模式匹配、表达式写法都有多种选择——AI 生成的 C# 风格确实可能比 Go "飘"一些,人类审查时要多花一点认知成本。
但工程实践里,EditorConfig + dotnet format 同样可以强制统一团队风格。而且别忘了:可读性的另一半是类型信息带来的语义清晰——满屏 interface{} 和 if err != nil 的 Go 代码,读起来真的比类型签名一目了然的 C# 省心吗?
这是文章用来论证"Go 碾压 Python"的核心论据,可它同样适用于反驳 Go 本身——C# 的类型系统严格程度,Go 根本不在一个量级:
record / required / 模式匹配的穷尽性检查:数据建模和分支覆盖,编译器全程盯死。文章说"只要 AI 试图调用不存在的方法、传错类型,编译器立刻拒绝"——C# 的编译器只会拒绝得更狠。Hacker News 上 Rust 阵营的反击逻辑("强类型不是 Go 专属"),C# 完全受用,而且 C# 的阅读门槛远低于 Rust:编译器拦得住错误,人类也读得懂代码,两头都占。
Go 有"永不出 Go 2.0"的承诺;.NET 这边,二十年前 .NET Framework 时代的代码至今能跑,向后兼容同样是微软的红线。这一条,双方打平。
如果讨论再往前推一步——AI 辅助编程的下一站是AI Agent 本身怎么造——C# 的优势就不是"不落下风",而是明显领先了:
async/await 从 2012 年起就成熟到家,配合 CancellationToken、超时、错误聚合,编排复杂控制流是语言级的能力;Go 的 goroutine 做同样的事,要靠 errgroup + context 手工拼,取消传播、错误扇出的出错面大得多。Microsoft.Extensions.Hosting 一整套生命周期管理,是构建长运行 Agent 服务的现成骨架。Agent 编排拼的是控制流的表达力和工程体系的完备性,这两样恰好都是 Go 欠了账、C# 存了款的地方。
捧一踩一不是本文的目的。Google 那篇文章有一个论点,Go 确实占了便宜:训练语料的一致性。
Go 代码"千人一面",整个开源生态都遵循同一套规范,意味着 AI 的训练数据更"干净",生成的 Go 代码更地道、更少风格漂移。这是用表达力换可预测性的经典取舍,在"人类快速审查 AI 产出"这个特定场景下,Go 的选择是对的。
但请注意这个优势的边界:它解决的是"AI 写出来的代码风格统不统一"的问题,而不是"AI 写出来的代码安不安全、健不健壮"的问题。后者靠的是类型系统和工具链深度——那恰恰是 C# 的护城河。
Hacker News 上有一条评论说得中肯:Google 原文标题用的是 "an" ideal language(一种理想语言),而不是 "the" ideal language(唯一的理想语言)。
这个细节很重要。Go 是一个足够好的样本,但它不是唯一答案。真要按 Google 自己定的标准——"审得准不准、维护得住不住"——打分:
维度 | Go | C# |
|---|---|---|
生成代码风格一致性 | ★★★★★ | ★★★☆☆ |
编译速度 | ★★★★★ | ★★★☆☆ |
类型系统严格度 | ★★★☆☆ | ★★★★★ |
工具链/编译器平台深度 | ★★★☆☆ | ★★★★★ |
异步与 Agent 编排能力 | ★★★☆☆ | ★★★★★ |
向后兼容性 | ★★★★★ | ★★★★★ |
(评分仅为示意,欢迎评论区对喷)
AI 时代的语言之争,不该默认只在 Go 和 Rust 之间选边。 C# 有资格上桌,而且按 Google 自己的那把尺子,它带的分量一点都不轻。
语言圣战没有意义,真正值得每个团队想清楚的,还是那个老问题的新版本:当 AI 成了你团队里产出最高、也最需要盯紧的"队友"——你的语言和工程体系,能不能帮你把这个队友看住?
参考资料:
如果本文对你有启发,欢迎点赞、在看、转发。你用 C# 还是 Go 跑 AI 辅助开发?评论区聊聊你的真实体感。