【导读】
最近 Google 开发者官方博客罕见地为一门语言站台:一篇题为《Why Go is an Ideal Language for AI-Assisted Software Engineering》的文章抛出论断------当 AI 能瞬间生成成百上千行代码,"写代码快不快"已经不再重要,**"审代码准不准"**才是新时代软件工程的核心瓶颈。而 Go 凭借"可读性优先"的哲学,意外成了 AI 辅助编程时代的赢家。文章冲上 Hacker News 热榜,评论区吵成一片。
热闹归热闹,有一个问题却几乎没人提:按文章自己定的那套评价标准,C# 不仅没有输,在好几个维度上还赢得更彻底。 这篇文章我们就按 Google 自己的尺子,把 C# 和 Go 逐条量一遍。
一、Google 的核心判断:瓶颈从"写"转移到了"审"
原文的逻辑链条很清晰:
过去衡量一门语言好不好,看的是好不好写 ------语法简洁不简洁、表达灵活不灵活。但当 AI 编程智能体能在几秒内生成大段语法正确的代码时,人类打字的速度不再是瓶颈,真正卡脖子的变成了:人类如何审查、验证并长期维护这些 AI 生成的代码。
顺着这个逻辑,文章给 Go 总结了四张底牌:
- 平台化工具链:gofmt、testing、go module、govulncheck 开箱即用,给 AI 提供持续、低成本的外部校验;
- 可读性优先:gofmt 强制统一风格,"千人一面"的代码让人类审查时一眼看出 AI 的幻觉和逻辑漏洞;
- 编译期强类型校验:AI 幻觉出不存在的方法或传错类型,编译器直接拒绝,配上极快的编译速度,形成"编译报错---自我修正"的高效闭环;
- 兼容性承诺:Go 1.0 的代码今天依然能编译运行,"永远不会有 Go 2.0",扛得住 AI 高频改动的冲击。
单看这些,Go 确实很香。但问题是------这四条,C# 哪条没有?
二、按 Google 自己的尺子,逐条量一遍 C#
1. 工具链平台化:Roslyn 的深度远超 go/analysis
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# 是加分项,不是减分项。
2. 可读性优先:Go 略胜,但差距没那么大
公平地说,这是 Go 真正占优的一条。C# 表达力强------LINQ、模式匹配、表达式写法都有多种选择------AI 生成的 C# 风格确实可能比 Go "飘"一些,人类审查时要多花一点认知成本。
但工程实践里,EditorConfig + dotnet format 同样可以强制统一团队风格。而且别忘了:可读性的另一半是类型信息带来的语义清晰 ------满屏 interface{} 和 if err != nil 的 Go 代码,读起来真的比类型签名一目了然的 C# 省心吗?
3. 编译期强校验:C# 的类型系统比 Go 强得多
这是文章用来论证"Go 碾压 Python"的核心论据,可它同样适用于反驳 Go 本身------C# 的类型系统严格程度,Go 根本不在一个量级:
- Nullable reference types:空引用是 AI 生成代码最容易埋的雷之一,C# 在编译期就能拦住,Go 的 nil pointer 只能等运行时 panic;
- 真正的泛型:Go 的泛型到 1.18 才补上,而且不能写在方法上;C# 从 2.0 时代就有完整泛型;
record/required/ 模式匹配的穷尽性检查:数据建模和分支覆盖,编译器全程盯死。
文章说"只要 AI 试图调用不存在的方法、传错类型,编译器立刻拒绝"------C# 的编译器只会拒绝得更狠。Hacker News 上 Rust 阵营的反击逻辑("强类型不是 Go 专属"),C# 完全受用,而且 C# 的阅读门槛远低于 Rust:编译器拦得住错误,人类也读得懂代码,两头都占。
4. 兼容性:二十年的向后兼容,微软同样在死保
Go 有"永不出 Go 2.0"的承诺;.NET 这边,二十年前 .NET Framework 时代的代码至今能跑,向后兼容同样是微软的红线。这一条,双方打平。
三、文章没提的:AI 时代做 Agent 编排,C# 是主场
如果讨论再往前推一步------AI 辅助编程的下一站是AI Agent 本身怎么造 ------C# 的优势就不是"不落下风",而是明显领先了:
- 异步模型 :C# 的
async/await从 2012 年起就成熟到家,配合CancellationToken、超时、错误聚合,编排复杂控制流是语言级的能力;Go 的 goroutine 做同样的事,要靠errgroup+context手工拼,取消传播、错误扇出的出错面大得多。 - 宿主与 DI 体系 :
Microsoft.Extensions.Hosting一整套生命周期管理,是构建长运行 Agent 服务的现成骨架。 - Agent 框架 :微软官方的 Microsoft Agent Framework 已于 2026 年 4 月正式发布 1.0 GA------它把 Semantic Kernel 的企业级底座(状态管理、中间件、遥测)和 AutoGen 的多智能体编排合并成统一 SDK,.NET 与 Python 双栈齐发,并原生支持 MCP / A2A 协议;微软官方明确表态"新项目应建在 Agent Framework 上",Semantic Kernel 和 AutoGen 双双转入维护模式。换句话说,.NET 的 Agent 开发栈不但没有缺位,反而刚刚完成了一次大一统。国内 .NET 社区还有 OpenClaw.NET 这类 MetaSkills 体系,把领域对象、工作流投影到技能 DAG 上做编排------用 C# 原生生态就能回答"Agent Harness 怎么造"这个问题,不需要拿 Go 从头复刻轮子。
Agent 编排拼的是控制流的表达力和工程体系的完备性,这两样恰好都是 Go 欠了账、C# 存了款的地方。
四、公允地说:Go 的真正优势在哪
捧一踩一不是本文的目的。Google 那篇文章有一个论点,Go 确实占了便宜:训练语料的一致性。
Go 代码"千人一面",整个开源生态都遵循同一套规范,意味着 AI 的训练数据更"干净",生成的 Go 代码更地道、更少风格漂移。这是用表达力 换可预测性的经典取舍,在"人类快速审查 AI 产出"这个特定场景下,Go 的选择是对的。
但请注意这个优势的边界:它解决的是"AI 写出来的代码风格统不统一"的问题,而不是"AI 写出来的代码安不安全、健不健壮"的问题。后者靠的是类型系统和工具链深度------那恰恰是 C# 的护城河。
五、结语:"an ideal",不是 "the ideal"
Hacker News 上有一条评论说得中肯:Google 原文标题用的是 "an" ideal language (一种理想语言),而不是 "the" ideal language(唯一的理想语言)。
这个细节很重要。Go 是一个足够好的样本,但它不是唯一答案。真要按 Google 自己定的标准------"审得准不准、维护得住不住"------打分:
| 维度 | Go | C# |
|---|---|---|
| 生成代码风格一致性 | ★★★★★ | ★★★☆☆ |
| 编译速度 | ★★★★★ | ★★★☆☆ |
| 类型系统严格度 | ★★★☆☆ | ★★★★★ |
| 工具链/编译器平台深度 | ★★★☆☆ | ★★★★★ |
| 异步与 Agent 编排能力 | ★★★☆☆ | ★★★★★ |
| 向后兼容性 | ★★★★★ | ★★★★★ |
(评分仅为示意,欢迎评论区对喷)
AI 时代的语言之争,不该默认只在 Go 和 Rust 之间选边。 C# 有资格上桌,而且按 Google 自己的那把尺子,它带的分量一点都不轻。
语言圣战没有意义,真正值得每个团队想清楚的,还是那个老问题的新版本:当 AI 成了你团队里产出最高、也最需要盯紧的"队友"------你的语言和工程体系,能不能帮你把这个队友看住?
参考资料:
- Google Developers Blog:《Why Go is an Ideal Language for AI-Assisted Software Engineering》 https://developers.googleblog.com/why-go-is-an-ideal-language-for-ai-assisted-software-engineering/
- Tony Bai(白明)公众号解读:《Google官方下场安利:AI时代,Go才是"最适合"的编程语言》
- Hacker News 讨论贴: https://news.ycombinator.com/item?id=49261133
- Microsoft Learn:《Microsoft Agent Framework 概述》(Agent Framework 是 Semantic Kernel 与 AutoGen 的官方继任者) https://learn.microsoft.com/zh-cn/agent-framework/overview/
如果本文对你有启发,欢迎点赞、在看、转发。你用 C# 还是 Go 跑 AI 辅助开发?评论区聊聊你的真实体感。