Robert Griesemer 亲述:只解决 90% 问题的“箭头函数”该长什么样?

本文永久链接 – https://tonybai.com/2026/05/06/robert-griesemer-on-go-arrow-functions

大家好,我是Tony Bai。

在 Go 语言的演进史上,很少有一个 Issue 能像 #21498 这样,跨越 9 年时光,累积近千条评论,却依然让官方核心团队如履薄冰。

这个 Issue 的目标很单纯:为 Go 提供一种更简洁的匿名函数语法(Short Function Literals)。或者用大白话说,大家想要一个像 JavaScript 或 Rust 那样的“箭头函数”。

每当一个 Gopher 在代码里写下:

slices.SortFunc(users, func(a, b User) int { return cmp.Compare(a.Age, b.Age) })

他大概率会在心里暗骂一句:“这代码真够笨重的。”

然而,Go 团队对此的回应一直是:“我们不想要魔法,我们只想要清晰。” 这种坚持让社区陷入了长达数年的僵局。

但就在最近,这场僵局似乎正在被化解。

Go 语言之父之一的Robert Griesemer 亲自下场发表了一段重量级评论。他没有给出一个试图满足所有人的复杂方案,而是抛出了一个充满工程智慧的诠释:

“也许试图为任何函数解决这个语法问题是误导性的。我们应该只为那些本来就很短的函数提供支持。”

今天,我们就来看看 Robert 最新诠释中的这个“只解决 90% 问题”的箭头函数,到底长什么样?应该如何用?

底层觉醒:放弃对“全能语法”的执念

Robert Griesemer 的这段话,实际上是对过去 9 年社区争论的一次“终极复盘”。

在这 9 年里,无数天才开发者试图设计出一种“完美”的缩写语法:有的想省掉括号,有的想省掉类型声明,有的甚至想通过 $1, $2 这样的占位符来彻底消灭参数列表。

但这些方案无一例外都让 Go 编译器头疼,更让代码的可读性变得支离破碎。

Robert 意识到,真正的问题不在于匿名函数太长,而在于我们试图让“箭头函数”承载它本不该承载的重量。

如果一个匿名函数里包含了 if 逻辑、for 循环、甚至是一个 switch 分支,那么它本质上就是一个多行逻辑块。对于这种逻辑,写出完整的 func() 语法,带上明确的参数名和结果类型,不仅不是负担,反而是对读者的仁慈。

于是,Robert 划定了一条冷酷的边界线:短函数语法,只服务于单表达式或单语句。

蓝图拆解:Robert 亲自执笔的语法模型

在 Robert 的设想中,Go 的短函数(箭头函数)应该由两个核心部分组成。

第一部分:针对“有返回值”的场景(单表达式)

这是高阶函数(如 Map、Filter、Sort)最常用的场景。Robert 提议采用 (args) -> expr 的符号:

ShortFunctionLit = “(” [ IdentifierList ] “)” “->” ( Expression | “(” ExpressionList “)” ) .

这意味着你可以写出如下的代码:

() -> 42                         // 无参数,返回常数
(x) -> math.Sin(x)               // 单参数,返回计算结果
(x, y) -> x < y                  // 多参数,返回布尔值
(x, y) -> (x + y, x * y)         // 多返回值(需括号包裹)

这里的精髓在于两点:

  1. 彻底消灭 return 关键字:如果右侧是一个表达式,结果会自动返回。
  2. 极简的类型推断:由于它是作为参数传递给某个已知签名的函数(赋值上下文),编译器可以 100% 确定 x 和 y 的类型。你不再需要写 (a int, b int) int 这种啰嗦的废话。

第二部分:针对“无返回值”的场景(单语句)

除了返回值,还有一种场景是“简单回调”:执行一个动作,但不返回结果。

为了严格区分这两种场景,Robert 引入了一个极其精妙的设计:利用大括号 {} 来作为“不返回结果”的视觉信号。

ShortFunctionLit = … | “{” SimpleStmt “}” ) .

例子如下:

() -> { /* do nothing */ }
(x) -> { fmt.Printf("log: %v\n", x) } // 执行打印,无返回
(x) -> { ch <- x }                    // 往通道发数据,无返回
(p) -> { (*p)++ }                     // 修改指针值,无返回

Robert 的设计逻辑非常清晰:

  • 没有 {}:必须返回一个值(表达式)。
  • 有 {}:必须不返回值(语句)。

这个视觉区分,让任何一个读者在扫过代码的一瞬间,就能理解这个匿名函数的副作用。

架构师的必修课:为什么“只解决 90%”才是最佳答案?

Robert 在评论中提到:

“这能解决 90% 的常见案例,就像短变量声明(:=)一样。”

这正是这篇文章最值得我们升维思考的地方。

一个平庸的语言设计者,会试图通过复杂的规则去覆盖 100% 的场景,最终让语言变得像 C++ 一样臃肿。而一个顶级的语言设计者(如 Robert),懂得利用“帕累托法则(二八定律)”

:= 并不完美,它在某些特定的作用域重叠情况下会引发困惑。但它解决了 90% 的声明问题,让 Go 代码变得极其清爽。

同样,Robert 提出的这个“箭头函数”蓝图:

  • 它不能写多行逻辑? 没关系,剩下的 10% 复杂场景,写 func() 更有助于维护。
  • 它不能省掉参数括号? 没关系,强制带上 () 可以避免解析歧义,保持 Go 一贯的“明确”风格。

*这种“克制”的艺术,正是 Go 语言在云原生时代能够取得成功的重要原因之一。** 它不追求在每一行代码上都胜过别人,它追求的是在大规模协作、在百万行代码库的维护上,保持最低的认知负荷。

未来的模样:现代化的代码重构

Robert 在文章末尾甚至已经想好了如何推广这个特性:

“如果我们引入了这个短格式,我们可以一键使用现代工具(modernizer)将现有的所有旧代码重写。”

想象一下,当你把你的项目升级到未来的 Go 版本,运行一下格式化命令。原本满屏的:

users.Map(func(u User) string {
    return u.Name
})

会瞬间收缩为:

users.Map((u) -> u.Name)

这既是字符的缩减,更是一场视觉的解放。

小结:在万变中,寻找最地道的“Go 味儿”

看完 Robert Griesemer 的这份亲述,你是否感受到了一种跨越时空的工程美学?

箭头函数在其他语言里早就不是新闻了。但 Go 团队为了把它设计得“更地道、更不容易出错、更符合长期维护利益”,足足纠结了 9 年。

这种对语法的敬畏,才是我们作为开发者真正应该学习的财富。最好的技术方案,往往不是那个功能最全的,而是那个能以最小的代价,解决最普遍痛点的。

只解决 90% 的问题,剩下的 10% 留给严谨与克制。

这,就是 Go 语言的“中庸之道”,也是它最强大的地方。


今日互动探讨:

你认同 Robert 这种“只做单行缩写”的底线吗?你觉得在 Go 中加入 -> 符号,会破坏它原有的朴素感吗?

欢迎在评论区分享你的深度见解!


还在为写 Agent 框架频频死循环、上下文爆炸而束手无策?我的新专栏 从0 开始构建 Agent Harness 将带你:

  • 抛弃臃肿框架,回归“驾驭工程 (Harness Engineering)”的第一性原理
  • 用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等,复刻极简OpenClaw
  • 构建坚不可摧的 Safety Middleware 与飞书人工审批防线
  • 在底层实现 Token 成本审计、链路追踪与自动化跑分评估
  • 从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”

扫描下方二维码,开启从 0 开始构建Agent Harness 的实战之旅。


原「Gopher部落」已重装升级为「Go & AI 精进营」知识星球,快来加入星球,开启你的技术跃迁之旅吧!

我们致力于打造一个高品质的 Go 语言深度学习AI 应用探索 平台。在这里,你将获得:

  • 体系化 Go 核心进阶内容: 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏,夯实你的 Go 内功。
  • 前沿 Go+AI 实战赋能: 紧跟时代步伐,学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等,掌握 AI 时代新技能。
  • 星主 Tony Bai 亲自答疑: 遇到难题?星主第一时间为你深度解析,扫清学习障碍。
  • 高活跃 Gopher 交流圈: 与众多优秀 Gopher 分享心得、讨论技术,碰撞思想火花。
  • 独家资源与内容首发: 技术文章、课程更新、精选资源,第一时间触达。

衷心希望「Go & AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚,享受技术精进的快乐!欢迎你的加入!

img{512x368}


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

“AI 让每个人都成了开发者”,就像“相机让每个人都成了摄影师”

本文永久链接 – https://tonybai.com/2026/05/05/ai-makes-everyone-a-developer-like-cameras-for-photographers

大家好,我是Tony Bai。

最近,在技术圈里流传着一个“非主流观点(Unpopular Opinion)”:

“‘AI 让每个人都成了开发者’,这句话是真的。就像当年‘相机的发明,让每个人都成了摄影师’一样。”

这句充满“内涵”的类比,在 Reddit、X 等社区引来了开发者的热议。它精准地戳中了所有专业开发者心中最深的隐忧:当 AI 将编程的门槛夷为平地,我们这些苦练了十几年“内功”的“老师傅”,还有存在的价值吗?

就在前几天,r/webdev 论坛上,一篇名为《我刚围观了一个非开发者用 AI Vibe-Coding 的全过程……兄弟们,我们稳了》的帖子,用一个极其生动、甚至有些滑稽的真实案例,为这个“灵魂拷问”给出了一个参考答案。

今天,我们就来复盘这场关于“技术平权”与“专业主义”的大讨论,看看在 AI 掀起的这场“全民编程”狂欢之下,到底藏着怎样的泡沫、陷阱与机遇。

一个非开发者的“玄学 Debug”之旅

故事的开端,来自一位名叫 eowenith 的开发者。他讲述了自己围观一位非技术背景的朋友,如何使用 Claude Code 构建一个应用的“奇葩”经历。

这位朋友对编程一窍不通,她的操作方式,被社区戏称为 “Vibe-Coding(氛围编码)”

  1. 脑子里有一个模糊的想法。
  2. 用大白话告诉 AI:“给我做一个XX网站。”
  3. AI 生成了一堆代码,她看不懂,直接运行。
  4. 网站崩溃了。
  5. 她把整个屏幕的截图发给 AI,然后配上一句:“这看起来不对劲。”
  6. AI 开始猜测问题,生成新的代码,然后再次崩溃……

eowenith 在帖子中写道:

“我眼睁睁地看着 Anthropic 的账单邮件一封封地发过来,她花了几个小时和几十次 Prompt,最终搞出来的东西,我可能用一两个 Prompt 就能做得更好。”

“最后,她甚至还嘲笑我,说我的 Claude Code 总结页面上的‘已用点数’和‘消息数’太少了,像个业余爱好者。”

这个案例,让评论区彻底炸了锅。

一位开发者一针见血地指出:

“那个‘嘲笑你点数用得少’的部分,真的把我逗笑了。低效地烧钱,居然成了一种炫耀资本。

另一位开发者则用更专业的视角剖析了这种“Vibe-Coding”的致命缺陷:

“一个没有底层知识的人,只会不停地 Prompt。AI 为了解决表层问题,会不断地创造‘权宜之计’,绕过那些真正核心的架构缺陷。最终,这些‘权宜之计’会互相叠加,让系统变得比一开始还要烂。

这种靠“直觉”和“感觉”驱动的开发模式,正在批量制造着新时代的“高科技屎山”。

“Token 猪”与“认知卸载”

在这场大讨论中,几个极其精辟的新概念应运而生,完美地概括了 AI 时代的行业乱象。

概念一:Token 猪(Token Pig)

这个词用来形容那些低效、懒惰、疯狂消耗 Token 的 AI 使用者

他们把 AI 当作一个无限的“许愿池”,拒绝进行任何有价值的思考,把最简单的任务,也用最昂贵的方式外包给大模型。

概念二:认知卸载(Cognitive Offloading)

一位开发者表达了一种更深层次的担忧:

“AI 确实很有用,但我对‘认知卸载’的长期影响感到担忧。我努力确保自己能理解 AI 做的每一件事,并花时间去搞懂那些看起来不太对劲的地方。”

当我们习惯于让 AI 为我们思考,我们的大脑就失去了构建深度知识模型(Mental Models)的机会。我们从“司机”变成了“乘客”。长此以往,我们不仅会失去对代码的掌控力,更会失去独立解决复杂问题的能力。

就像评论区里那个极其扎心的比喻:

“当手机出现后,一种新的脑损伤出现了——我们记不住电话号码了。”

当工具抹平了门槛

回到最初的那个“摄影师”比喻。

一位用户分享了她丈夫的真实经历:

“我的丈夫曾经是一名职业摄影师。当数码相机的浪潮到来,‘让每个人都成了摄影师’时,他被迫离开了这个行业。因为客户们开始觉得,他们不应该再为一个‘按一下快门’的动作,支付高昂的费用。”

这几乎是所有专业开发者内心最深的恐惧。

但另一位用户也提出了一个类似的观点:

“我用我的 iPhone,就能拍出比 30 年前职业摄影师更好的照片。99.9999% 的照片都是由我和其他非专业人士拍摄的。所以,这个比喻或许恰恰证明了:我们真的不再需要那么多的‘职业开发者’了。

这场争论,最终指向了一个更本质的问题:当工具的门槛被无限降低,我们作为“专业人士”的价值,到底还剩下什么?

从“手艺”到“品味”的跃迁

在这场看似无解的“生存危机”大讨论中,我们依然能找到一条属于高级架构师的、清晰的破局之路。

第一条:AI 抹平了“技法”,却放大了“品味”

一位开发者的评论获得了大量高赞:

“工具降低了门槛,但品味(Taste)和基本功(Fundamentals),依然是区分‘能跑的代码’和‘好的代码’的唯一标准。就像相机让拍照变容易了,但没让拍出好照片变容易。”

AI 可以帮你写出符合语法规范的代码,但它无法替你做出架构决策。

  • 它不知道你的业务在未来半年会如何演进。
  • 它不理解高并发场景下,一次锁竞争的代价有多大。
  • 它更无法在“开发效率”与“长期可维护性”之间,做出最符合当下团队资源的权衡。

这些,就是“品味”。

第二条:从“执行者”到“定义者”

另外一位开发者的观点同样深刻:

“相机没有让每个人都成为摄影师,它只是降低了门槛。AI 也一样,它不会让每个人都成为开发者。但它会将价值,从‘编写代码’,转移到‘知道该构建什么,以及如何塑造产出’上。

当 AI 能够完美地执行指令时,“下达正确的指令”就成了最稀缺的能力。

我们作为资深开发者的核心价值,正在从一个“手艺精湛的工匠”,转变为一个“拥有上帝视角的系统设计师”。

第三条:别在工具层内卷,向上走,到“思想层”去

整场讨论中,最让我感到共鸣的,是下面的一段话:

“我真的超爱写优雅、干净、极简的代码(这正在迅速成为一项无用的技能)。但归根结底,我一直都是一个‘想法的建造者(Builder of Ideas)’。”

“我们的超能力,不是写代码的能力,而是把一个模糊的想法,变成一个真实的产品、系统、服务的能力。社会需要我们,是因为这个。代码,只是我们用来交付这个概念的工具。

小结:别担心,你的价值远超你写的代码

回到最初的那个比喻:“AI 让每个人都成了开发者”,就像“相机让每个人都成了摄影师”。

是的,相机让记录生活变得轻而易举,但它并没有消灭那些能够捕捉光影、构图、和决定性瞬间的艺术大师。

同样,AI 让实现功能变得前所未有的简单,但它也永远无法取代那些能够洞察需求、设计架构、并对系统最终质量负责的软件架构师

AI 拿走的,只是我们手中的“体力活”。

而留给我们,并被无限放大的,是我们作为工程师最宝贵的东西:经验、品味、判断力,以及将混乱的世界,构建成优雅系统的能力。

不要再为“写代码”这件事本身感到焦虑了。

向上看,去思考,去设计。

因为在那片 AI 无法触及的高地上,才是你真正的价值所在。

资料链接:

  • https://x.com/Samaytwt/status/2047315095773216780
  • https://www.reddit.com/r/webdev/comments/1stjfo4/i_just_watched_a_nondev_vibecode_something_were/

今日互动探讨:

在 AI 编程的浪潮中,你是否也曾有过“被外行指导内行”的憋屈经历?你认为一个专业开发者,在 AI 时代最不可被替代的核心竞争力是什么?

欢迎在评论区分享你的看法!


还在为写 Agent 框架频频死循环、上下文爆炸而束手无策?我的新专栏 从0 开始构建 Agent Harness 将带你:

  • 抛弃臃肿框架,回归“驾驭工程 (Harness Engineering)”的第一性原理
  • 用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等,复刻极简OpenClaw
  • 构建坚不可摧的 Safety Middleware 与飞书人工审批防线
  • 在底层实现 Token 成本审计、链路追踪与自动化跑分评估
  • 从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”

扫描下方二维码,开启从 0 开始构建Agent Harness 的实战之旅。


原「Gopher部落」已重装升级为「Go & AI 精进营」知识星球,快来加入星球,开启你的技术跃迁之旅吧!

我们致力于打造一个高品质的 Go 语言深度学习AI 应用探索 平台。在这里,你将获得:

  • 体系化 Go 核心进阶内容: 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏,夯实你的 Go 内功。
  • 前沿 Go+AI 实战赋能: 紧跟时代步伐,学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等,掌握 AI 时代新技能。
  • 星主 Tony Bai 亲自答疑: 遇到难题?星主第一时间为你深度解析,扫清学习障碍。
  • 高活跃 Gopher 交流圈: 与众多优秀 Gopher 分享心得、讨论技术,碰撞思想火花。
  • 独家资源与内容首发: 技术文章、课程更新、精选资源,第一时间触达。

衷心希望「Go & AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚,享受技术精进的快乐!欢迎你的加入!

img{512x368}


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

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! 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