标签 AI 下的文章

Go 的 AI 时代宣言:我们如何用“老”原则,解决“新”问题?

本文永久链接 – https://tonybai.com/2025/12/25/go-next-frontier-gophercon-2025

大家好,我是Tony Bai。

“AI 正在重塑软件工程,但它并没有改变软件工程的本质。”

在 GopherCon 2025 上,Go 语言产品负责人 Cameron Balahan 发表了一场题为《Go 的下一个前沿领域》的主题演讲,重点关注了AI 时代的软件工程这个重要的主题。在这个充满焦虑与炒作的时代,Cameron 没有贩卖焦虑,也没有盲目追逐热点。相反,他通过一组冷静的数据和深刻的洞察,为我们描绘了一幅清晰的蓝图:Go 语言的核心原则——简单、高效、工程化——在 AI 时代不仅没有过时,反而变得比以往任何时候都更加重要。

本文将带你深入这场演讲的核心,解读 Go 团队如何看待 AI 对软件工程的冲击,以及他们正在构建什么样的未来。

AI 时代的“软件工程失衡”

Cameron 首先抛出了一个尖锐的观察:AI 的引入,打破了软件工程现有的平衡。

根据 Stack Overflow 的调查,近 60% 的开发者使用 AI 来写代码,但只有 10% 的人使用 AI 来进行部署和监控,用 AI 进行代码审查的人也仅有20%出头儿。

这就导致了一个尴尬的局面:

  • 生产过剩:AI 大幅降低了生成代码的成本,代码量激增。
  • 审查瓶颈:人类使用AI审查代码比例不高,而人工审查代码的速度并没有显著提升,导致开发者不得不花费更多时间在 Code Review 上。
  • “洗碗效应”:正如一位开发者所吐槽的:“我希望 AI 帮我洗衣服、洗碗,让我能去搞艺术。但现在是 AI 在搞艺术写代码,而我却在洗碗(修 Bug、调配置)。”

这样一来,在一个代码生成成本趋近于零的时代,代码的可读性、一致性和可维护性变得前所未有的重要。而这,恰恰是 Go 语言自诞生之日起就坚守的阵地。

Go —— 天生适合 AI 的语言

有趣的是,Go 语言的设计者们当年并没有以此为目标,但 Go 却意外地成为了最适合 LLM 生成的语言之一。

Cameron 引用了 Thomas Ptacek 的观点:

“Go 拥有恰到好处的类型安全、丰富的标准库,以及一种推崇(虽然有时显得重复)惯用语的文化。这使得 LLM 生成 Go 代码的效果极佳。”

为什么 Go 对 AI 如此友好?

  1. 强类型与静态检查:能让 AI 生成的代码在编译期就暴露大部分错误,减少运行时调试的痛苦。
  2. 标准库与惯用语:Go 社区高度统一的代码风格和丰富的标准库,为 AI 提供了高质量、一致性极强的训练语料。
  3. 工程化工具链:Go 强大的 gofmt, go vet, gopls 等工具,能帮助人类快速验证和修复 AI 生成的代码。

Go 的“简单”和“显式”,曾经被视为一种对人类的妥协,如今却成为了 AI 时代最大的资产。

破局 —— Go 团队的三大应对策略

面对 AI 带来的挑战,Go 团队并未坐视不管。Cameron 详细阐述了未来的三大战略方向。

解决“停在过去”问题 (Stuck in the Past)

LLM 是基于历史数据训练的,因此它们倾向于生成“老式”的代码(例如使用 ioutil.ReadFile 而不是 os.ReadFile)。

对策Go 团队正在开发 ModernizersAuto-Inliner 等工具,通过自动化的方式,将旧代码一键升级为使用新特性的 Modern Go 代码。这不仅帮助了开发者,也通过更新开源生态,反哺了未来的 AI 模型。

让 AI 使用 Go 工具 (MCP SDK)

AI 不应只是一个生成器,它应该成为一个能使用工具的“智能体”。

对策:Go 团队已经构建了官方的 MCP (Model Context Protocol) SDK。这将允许 AI 助手直接调用 gopls 等工具,理解项目结构、进行类型检查、甚至运行测试。想象一下,你的 AI 助手不仅能写代码,还能自己运行 go test 并修复错误!

质量信号左移

随着 AI 开始自主选择依赖库,我们需要确保它选择的是安全、可靠的库。

对策:Go 团队将把漏洞扫描、质量评分等信号,通过 MCP 等渠道直接暴露给 AI,让 AI 在写代码的第一时间就能做出明智的依赖选择。

Go 生态的“飞轮效应”

演讲的最后,Cameron 展示了一个令人振奋的“飞轮模型”:

  1. 更强的 Go 生态(高质量代码、文档、工具) -> 训练出更懂 Go 的 AI
  2. 更懂 Go 的 AI -> 帮助开发者更高效地构建 Go 应用
  3. 更多的 Go 应用 -> 吸引更多开发者加入社区,贡献更多开源代码
  4. 更多开源代码 -> 进一步增强 Go 生态,回馈 AI 训练

这个飞轮正在加速旋转。Cloudflare 的数据显示,2025 年全球 20% 的自动化 API 请求由 Go 客户端发起,而在 AI 基础设施领域,Go 更是扮演着核心角色。

小结

Cameron 用他对纽约这座城市的热爱作为比喻:“务实、真诚、充满能量”。这不仅是纽约的特质,也是 Go 社区的特质。

在 AI 时代,Go 并没有被边缘化,反而因为其坚守的工程价值观,成为了连接人类智慧与 AI 能力的坚实桥梁。未来不是 AI 取代我们,而是我们与 AI 一起,用 Go 构建出更伟大的软件。

资料链接:https://www.youtube.com/watch?v=M2gduDM-MT0


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

AI 还在写“老式 Go”?Alan Donovan 详解 Go 代码的现代化

本文永久链接 – https://tonybai.com/2025/12/22/alan-donovan-go-code-modernization

大家好,我是Tony Bai。

“Go 承诺了兼容性,但这并不意味着我们应该永远停留在过去。”

在 GopherCon 2025 上,Go 团队核心成员、静态分析工具专家 Alan Donovan 带来了一场题为《Analysis and Transformation Tools for Go Codebase Modernization》的精彩演讲。

他的分享揭示了一个有趣的现象:当我们还在为 AI 生成的代码欢呼时,Go 官方团队却发现 AI 正在固化过时的编程模式。 为了应对这一挑战,官方正在构建一套强大的自动化工具链,帮助我们将代码库带入 Modern Go 的时代。

本文将带你深入这场演讲的核心,揭秘 Go 官方如何通过工具化手段,解决 AI 时代的“代码老化”问题。

为什么要“现代化”?

Go 的兼容性承诺是其成功的基石,但这同时也带来了一个副作用:旧的代码永远能跑,所以我们很少有动力去更新它。

然而,随着 Go 版本的迭代,语言和标准库引入了大量旨在提升可读性、性能和安全性的新特性:

Donovan 展示了一个经典案例:一段传统的、使用了 strings.Split 和三段式 for 循环的代码(如下图):

通过引入新特性(迭代器、slices.Contains、range int),这段代码不仅减少了 6 行,还消除了不必要的内存分配,逻辑变得一目了然。新的现代Go代码如下图:

现代化的意义,不仅在于代码质量的提升,更在于开发者能力的进化。 通过工具自动应用这些新模式,开发者能在潜移默化中学习到“更地道”的 Go 写法。

AI 的局限与工具的使命

Donovan 分享了一个令人深思的实验:他测试了当前最先进的“思考型”大模型,要求它们使用最新的 Go 特性编写代码。

结果令人大跌眼镜:AI 顽固地坚持使用旧式的写法。

即使在被明确提示使用新特性后,AI 依然会编造出“这个特性在 1.22 中不可用”等谎言来为自己辩护,或者即使使用了新特性,也经常写出错误的代码。

“AI 是在旧代码的海洋中训练出来的。如果全世界的代码都是旧的,AI 就会永远说着一口‘老式 Go’的方言。”

这揭示了一个深刻的矛盾:AI 正在固化过时的编程模式。 打破这个循环的唯一方法,就是大规模地更新现有的代码库,让 AI 学习到新的语料。而这,正是 Go 官方工具链的使命。

第一条路径——定制化的 Modernizers

为了解决这个问题,Go 团队基于 go/analysis 框架(也就是 go vet 和 gopls 的底座),开发了一套名为 Modernizers 的分析器。

Modernizer 是一个特殊的 Linter,不仅能发现问题,还能提供自动修复 (Fix),并且这个修复必须是使用新特性绝对安全的。

Go 团队已经开发了约 20 个 Modernizers,并在 gopls v0.18 中发布。你现在在编辑器中看到的很多“建议修改”,背后就是它在工作。

然而,开发 Modernizer 的过程充满了艰辛。Donovan 以 range int 这个看似简单的重构为例,展示了它在处理变量作用域、副作用顺序时遇到的 4 个极其隐蔽的 Bug。比如下面这个:

“直接的语法树操作 (AST manipulation) 极其困难,即使是经验丰富的专家也容易出错。”

Modernizers 虽然好用,但开发成本极高,且只能针对特定特性进行定制,难以作为通用的解决方案。

注:要使用上述modernizer,需要单独运行命令go run golang.org/x/tools/go/analysis/passes/modernize/cmd/modernize@latest -fix ./…。

第二条路径——通用的 Auto-Inliner

为了解决 Modernizers 的局限性,赋能社区自己进行现代化改造,Go 团队探索出了一条更通用、更安全的路径:基于内联 (Inlining) 的“自助式重构”

核心思想

如果我们想要废弃一个旧函数(如 oldmath.Sub),并引导用户使用新函数,库作者只需要做两件事:

  1. 保留旧函数,但将其实现修改为直接调用新函数。
  2. 添加魔法注释://go:fix inline。

工具的威力

当 gopls 或未来的 go fix 命令看到这个注释时,它会自动将所有调用 oldmath.Sub(a, b) 的地方,安全地替换为 newmath.Sub(b, a)。

注:由于newmath.Sub(b, a)是oldmath.Sub(a,b)的新实现,因此称为inline,而且是source-level inline。

实际的替换是这样的:

这个机制的强大之处在于:

  • 安全性:内联器 (Inliner) 是一个极其复杂的算法(约 7000 行代码),它已经系统性地处理了所有副作用顺序、变量遮蔽等边缘情况。基于它进行的重构,天然就是安全的。
  • 自服务 (Self-Service):任何库的作者,都可以通过添加一行注释,来引导用户迁移到新的 API。这不再是 Go 官方的特权。

Google 内部的 C++ 团队已经利用类似的机制清理了 200 万处调用。Go 团队计划在 Go 1.26 或 1.27 中,将这一能力正式带入 go fix 命令。

小结:拥抱变化,拥抱工具

Alan Donovan 的演讲,为我们描绘了一个清晰的未来:

  1. Modernizers 将继续作为官方维护的精品工具,帮助我们采纳语言的新特性。
  2. Auto-Inliner 将赋能所有库作者,以一种安全、自动化的方式推动生态系统的演进。

作为 Gopher,我们需要做的,就是及时更新我们的工具链,关注 gopls 的提示,并乐于接受这些自动化的改进。因为在 AI 还在学习旧代码的时候,我们的工具已经准备好带领我们通向 Modern Go 的未来。

资料链接:https://www.youtube.com/watch?v=_VePjjjV9JU


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 从 0 开始构建 Agent Harness Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats