MoreRSS

site iconTony Bai | 白明修改

《Go语言精进之路》作者,Go C程序员,架构师,技术讲师、撰稿人。先后贡献了lcut、cbehave、buildc多个工具框架。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Tony Bai | 白明的 RSS 预览

“辛辛苦苦考上985,却发现AI能替代我90%的工作”:今天的高考,我们还在为什么而战?

2026-06-07 08:08:35

本文永久链接 – https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless

大家好,我是Tony Bai。

今天,2026年6月7日,千万名考生再次走向战场。

考场外,红色的横幅依然高悬,旗袍与鲜花依然簇拥。但在喧嚣之下,空气中却弥漫着一种前所未有的复杂情绪。

数据已经给出了最直观的反馈:在经历了2024年1342万人的历史峰值后,2025年和2026年的高考报名人数连续两年出现下滑。2026年全国高考报名人数仅为1290万人,比2025年的1335万人还减少45万人

生源的两连降,折射出的是无数家庭最深层的理性觉醒。在这个2026年的夏天,生成式AI、智能Agent和全自动工作流已经深度嵌入社会的每一个齿轮。

前阵子,一位本科毕业于某顶尖985高校、刚刚工作两年的程序员在社交平台上发帖:

“当年高考,我是全省前0.5%的做题家。辛辛苦苦在985卷了四年,以为拿到了中产阶级的入场券。结果工作不到两年,公司引入了AI 研发工作流。我现在每天90%的工作——写基础代码、debug、甚至写技术文档,AI两秒钟就能做得比我更好、更无懈可击。我开始怀疑,我那十二年的寒窗苦读,到底算什么?”

这条帖子瞬间引爆了全网的共鸣与焦虑。

今天的高考,我们还在为什么而战?如果连最顶尖的985、211学历,在AI面前都显得如此脆弱,我们付出的巨大代价,究竟在交换什么?

斯坦福的残酷研究:为什么我们的大学无法对抗AI的清算?

要回答“今天的高考还在为什么而战”,我们必须先看清一个长期被我们忽视的真相:我们的高等教育,正在让最聪明的年轻人“停止成长”。

斯坦福大学联合北京大学、清华大学、俄罗斯高等经济学院等全球顶尖机构,在《Nature Human Behaviour》(自然-人类行为)上发表了一篇具有里程碑意义的长期追踪研究

研究团队对中国、美国、印度、俄罗斯数万名计算机和电子工程专业的学生进行了长达四年的标准化测试,得出了两个极具颠覆性的结论:

入学时,中国高考生是无可争议的“世界霸主”

在18岁踏入大学校门的那一天,中国大一新生的学术能力和数理基础处于全球同龄人的金字塔尖,其批判性思维(Critical Thinking)能力也与美国同龄人完全持平。

这证明,我们高强度的高考选拔,确实筛选出了这个星球上最聪明、最能吃苦、逻辑最严密的一批年轻人。

毕业时,我们的学生经历了残酷的“技能退化”

然而,追踪到大四毕业时,情况发生了戏剧性的逆转。

在大学四年里,美国学生的批判性思维能力实现了大幅度增长(约0.5个标准差)。而中国、印度和俄罗斯的学生,在四年里批判性思维几乎“零增长”,甚至在后两年出现了绝对值上的显著下降。

在数学和物理等专业学术能力上,中国学生在大一结束后,也出现了明显的、绝对的技能损失(下降约0.3标准差)。

这篇《Nature》论文揭示了一个近乎残酷的事实:中国的高考生在18岁那年达到了认知和技能的巅峰,然后,在大学四年里,他们被“严进宽出”的淘汰机制、陈旧的专业划分、以及重灌输轻思辨的教学模式,温水煮青蛙般地削弱了。

当这群大四毕业生拿着“高起点、低增值”的认知系统,一头撞上2026年已经进化到能够自我迭代的AI系统时,悲剧就发生了。

那些在大学里靠死记硬背应付考试拿下的GPA,在AI面前,连一秒钟的抵抗力都没有。

AI时代的清算:被替代的90%,到底是什么?

为什么那位985毕业生会感叹“AI替代了我90%的工作”?

因为在2026年的今天,AI首先消灭的,恰恰是那些“有明确标准、有套路可循、依赖信息检索和加工”的白领工作。

而这些工作,正是过去的大学教育最擅长培养、也是中产家庭最向往的就业方向:

  • 初级程序员:AI自动编程工具已经能完成大部分基础代码的编写与测试。
  • 翻译与文案策划:多模态大模型能够瞬间生成符合各种文化语境的译文和营销方案。
  • 基础数据分析师:复杂的报表统计、趋势预测,AI可以在极短时间内完成可视化输出。
  • … …

反思一下:这些被替代的工作,其核心特征不就是“做题”吗?

给出一个明确的需求(题目),寻找最优的算法或方案(标准答案)。

高考,是一场关于“寻找标准答案”的终极训练;而我们的大学,在过去很长一段时间里,只是这场训练的延续。

当“做题”的能力被AI彻底平替,我们十二年寒窗苦读积累的优势,在这一瞬间被抹平了。

2026年的质问:今天的高考,我们还在为什么而战?

既然如此,我们为什么还要支持孩子去考场?高考在今天,究竟还有什么意义?

如果我们依然把高考当成“通往高薪工作的自动售票机”,那我们一定会失望。因为那台售票机,已经坏了。

但如果我们换一个视角,高考在2026年,依然是一场不可替代的“成人礼”。我们今天在高考中战斗,是为了拿回三样AI永远无法夺走的东西:

1. 战的是“深度专注与抗挫折的底层神经元”

高考不仅考查知识,更是一场对意志力、抗压能力、多任务管理和长期深度专注力的极限训练。

在碎片化信息和即时反馈(如短视频、快餐娱乐)毁掉一代人脑前额叶的时代,能够为了一个长远目标,日复一日地进行深度学习、克服枯燥和焦虑——这种“深度专注的神经机制”,是你未来驾驭AI、不被AI深度娱乐化奴役的唯一底层硬件。

2. 战的是“在无标准答案世界里,寻找最优解的勇气”

很多人抱怨高考僵化,但高考恰恰教给普通人一件事:在规则极其明确的系统里,如何通过自我迭代,把自己的能力逼出极限。

这种“在给定约束条件下,调动一切资源求得最优解”的肌肉记忆,在走出考场后,可以无缝迁移到任何一个充满未知、没有标准答案的领域。

3. 战的是“改写自身命运的入场券”

尽管学历在贬值,但不可否认,高考依然是这个社会最公平、杂质最少的一次阶层跃迁和朋友圈重组的机会。

你考上的名校,它所能给你的最大价值,已经不再是课堂上的专业知识(那些网上都有),而是和你并肩站在一起的、同样经历过极限训练的同龄人群体,以及这个平台带给你的眼界和高维认知。

自救路径:考完之后,如何重塑你的“免裁系统”?

明天之后,高考生们将迎来人生中最长的一个暑假。但请记住,真正的分水岭,从交卷的那一刻才刚刚开始。

如果你不想在四年后成为那个被AI替代90%的“失业做题家”,你必须在大学第一天起,按照以下三步路径,重新设计自己的成长曲线:

步骤一:从“答题者”转变为“提问者”

未来的价值,不取决于你脑子里记了多少标准答案,而取决于你能否向AI、向世界提出最具洞察力的问题。在大学里,多去问“为什么(Why)”和“如果……会怎样(What if)”,而不是仅仅去背诵“是什么(What)”。

步骤二:建立你的“AI-Native”个人工作流

不要把AI当成作弊工具,而要把自己当成一个“AI团队的PM(项目经理)”。去学习如何编写结构化的Prompt,如何用多款AI工具协同完成一个研究报告、一个独立网站或一个创意视频。未来的竞争,不是人与AI的竞争,而是“掌握了AI的人”与“没掌握AI的人”的竞争。

步骤三:死守“人性的护城河”

去体验真实的生活,去和不同背景的人深度交流,去大自然中感受风、光与温度。去阅读那些不考的经典著作,去思考没有标准答案的伦理与道德。

人类特有的同理心、直觉、审美、物理世界的交互能力,以及在迷茫中坚守信仰的感性,是AI在很长一段时间里无法跨越的终极护城河。

小结

后天,当千万名考生走出考场,迎接他们的将是一个与他们父母辈完全不同的世界。

这个世界充满了不确定性,甚至有些冰冷。

但请不要害怕。高考从未保证过我们一生的无忧,它只是给了我们一次证明自己可以“为了梦想竭尽全力”的机会。

今天的高考,我们不为那张逐渐贬值的文凭而战,我们为那个在重压下历经淬炼、拥有无限自驱力、随时准备重塑自我的自己而战。

祝所有2026届考生,考场得意,金榜题名;更祝你们,在人生的下一场AI风暴中,乘风破浪。

资料链接:https://www.researchgate.net/publication/349707487_Skill_levels_and_gains_in_university_STEM_education_in_China_India_Russia_and_the_United_States


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

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

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


原「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}


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

© 2026, bigwhite. 版权所有.

传奇黑客 Geohot 炮轰 AI Agent:这是软件工程史上代价最昂贵的灾难!

2026-06-06 07:39:53

本文永久链接 – https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster

大家好,我是Tony Bai。

在 AI 辅助编程疯狂席卷全球的今天,几乎每个开发者的双眼都被“效率翻倍”、“一键生成应用”的狂热口号晃得睁不开眼。大厂管理层在积极推进“全员 AI 编码”,创业者在吹嘘“氛围编码(Vibe Coding)”。

然而,就在这个全民狂欢的时刻,科技界最著名的叛逆天才、传奇黑客 George Hotz(网名 Geohot) 站了出来。他曾在 17 岁时成为全球首位解锁 iPhone 的人,随后又单枪匹马破解了 PS3,并创办了自动驾驶独角兽 Comma.ai。

最近,Geohot 在他的个人博客上发表了一篇名为《The Eternal Sloptember(永恒的垃圾九月)》的文章。在这篇文章里,他用极其冰冷且辛辣的笔触写道:

“我在这里立个 flag:在软件开发中引入 AI Agent,将是行业历史上代价最昂贵的错误之一。因为 Agent 根本不会写程序,而人们需要花越来越长的时间才能意识到这一点。”

这篇文章迅速引爆了开发者社区。在 Reddit 的 r/webdev 板块上,该话题斩获了数千个高赞,引发了无数一线架构师和开发者的强烈共鸣。

为什么这位顶级黑客会把 AI Agent 视为软件工程的毒瘤?他口中的“永恒垃圾九月”究竟隐藏着怎样可怕的行业真相?

典故溯源:什么是“永恒的垃圾九月”?

要理解 Geohot 的愤怒,我们首先需要理解他借用的一个历史梗——“永恒九月(Eternal September)”

在互联网早期的 Usenet 时代,每年九月,都会有大批大学新生接入网络。这群新手由于不懂网络礼仪(Netiquette),会短暂地破坏原有技术社区的纯粹与优雅。但过去,老用户们只需花费一个月时间,就能将这些新生“同化”。

直到 1993 年 9 月,美国在线(AOL)向其数百万普通用户全面开放了 Usenet。新手的涌入再也没有停止过,原有社区的精致文化被彻底、永久地稀释了。从那以后,老网民将这个悲剧称为“永恒九月”。

Geohot 认为,现在的软件工程正在经历一场由 AI Agent 带来的“永恒垃圾九月(The Eternal Sloptember)”

大模型(LLM)本质上是“高度复杂的统计模型,旨在模仿人类编程的分布”。它们吐出来的代码,在语法和格式上看起来天衣无缝,但在底层逻辑和系统架构上,往往是坏的、错的。最致命的是,这种“错”被包装得越来越隐蔽,越来越难以被察觉。

无数根本不具备底层系统思维的“调参手”,正在用 AI 疯狂向世界的开源社区和企业代码库里倾倒垃圾代码(Slop)。

“老虎机”效应:Geohot 历时半年的亲身实验

和那些只会纸上谈兵的评论家不同,Geohot 亲自用 AI 进行了长达 6 个月的深度开发实验。

他尝试用 AI Agent 编写他的深度学习框架 tinygrad 的部分代码,甚至尝试用 AI 逆向工程一块 USB 到 PCIe 的芯片。

他的实验结论可以用两个词来概括:极其失望

“AI 确实非常擅长快速搭建一个原型(Prototype),”Geohot 承认。但当你试图去打磨它、消灭最后 5% 的边缘 Bug、让其达到工业级标准时,AI 就会变成一台“老虎机(Slot Machine)”:

[输入 Prompt] ───> 摇下老虎机摇杆 ───> [输出 buggy 代码 A]
                                             │ (发现错误,重新 Prompt)
                                             ▼
[输入修正 Prompt] ───> 再次摇下摇杆 ───> [输出稍微不同的 buggy 代码 B]

你一次次地拉下摇杆(修改 Prompt),AI 一次次给你吐出看似不同、实则依然带有微妙缺陷的代码。你感觉自己只差临门一脚,但你永远无法真正跨过那条代表“完美交付”的终点线。

“这种试错和盲目摸索(类似Ralph loop),比我自己从第一性原理出发去手写,要慢得多。”Geohot 坦言,“这完全达不到我工作过的任何一家公司的基本技术门槛。”

相比之下,他发现一个古老的自动漏洞挖掘工具 AFL(American Fuzzy Lop,模糊测试工具) 找出的代码漏洞都比大模型多。因为 AFL 是纯粹确定性的,它没有人类社交焦虑,更没有被 AI 公司的“心理战(Psyops)”所污染。

大厂病灶:为什么非技术管理层会成为“垃圾代码”的帮凶?

既然 AI Agent 开发如此低效,为什么现在各大巨头依然在疯狂推进?

Geohot 揭示了企业管理层一个极其荒谬的逻辑漏洞:对“虚假指标”的崇拜。

在大型企业中,管理层通常是非技术出身的。他们无法辨别代码的高级设计与品味,他们只能看懂看得见的指标——比如“开发进度图表”和“代码产出行数(Lines of Code, LOC)”。

“那些底层的、平庸的开发者(Bottom Performers),通过使用 AI,突然产出了 10 倍的代码量。”

管理层看到图表后大喜过望:“看啊!我们的团队多有效率!这个星期我们提交了 100 个 PR!”

但他们不知道,这多出来的 10 倍代码,全部都是无法维护的“工业垃圾(Slop)”。

这造成了极度扭曲的恶性循环:

  1. 底层开发者用 AI 疯狂复制粘贴,提交海量垃圾 PR。
  2. 由于大企业的反馈循环极慢、极官僚,这些黑盒垃圾代码顺利混入主干分支。
  3. 认知负担转嫁:高水平的资深工程师(Top Performers)不得不花费双倍、甚至十倍的精力和认知负载(Cognitive Load),去帮这些 AI 审查代码擦屁股、Debug。

这就是为什么 Geohot 说:“AI Agent 对大企业的伤害,远比对个人或小团队的伤害要深得多。”

终局梦醒:当黑盒代码的“账单”到期

Reddit r/webdev 板块上的大批大厂老兵,用自己身边的真实惨剧,印证了 Geohot 的预言。

一位在 Fortune 100 强企业工作的开发者留言道:

他们的管理层在大会上狂热地宣称“AI 将接管一切开发,以后周五下午直接让 AI 部署 1 万行代码上线”。

“我们这些一线的工程师在下面默默看着。等这波 AI 狂热退去,账单到期,面对一堆无人能懂的‘黑盒代码(Black Boxes)’在半夜 3 点崩溃时,这些管理层会迎来极其残酷的梦醒时刻。

目前的微服务和企业级软件,本就已经因为复杂的业务需求和拼凑的库而变得极其脆弱。一旦你引入 AI,让它用“在 StackOverflow 上抄来的、似是而非的代码”去填补这些系统的空隙,你实际上是在制造一个“无法被任何人理解、也无法被任何人重构”的终极怪胎

“没有经验的 junior 开发者加上 AI,就是一场灾难的配方。” 另一位老兵写道。

幸存者法则:别在“AI 妄想症”中自残

面对这场由大厂和 AI 巨头联手制造的“AI 妄想症(AI Psychosis)”,真正的工程师该如何自救?

Geohot 在文章的结尾,给出了一个极具力量、甚至带有一丝英雄主义的生存守则:

“这个时代真正的故事,将是谁能在这场‘AI 妄想症’中保持清醒,不伤害到自己。”

  1. 回归第一性原理(First-Principles):放弃用 AI 盲目试错。当你遇到技术难题时,去读书,去查阅最干净、最硬核的一手的底层文档,搞清楚 CPU、内存和操作系统的底层运行机制。
  2. 把 AI 降级为助手,而不是总监:Geohot 并不排斥 AI,但他对 AI 的定位极其清晰——它是一个更聪明的谷歌搜索,是一个帮你写样板代码、帮你写测试基准(Benchmarks)的高效秘书。但系统的架构设计、核心逻辑和最终决策,必须牢牢握在你自己的手里。
  3. 拒绝成为平庸的羊群:当周围的人都在用 AI 批量生产垃圾代码并为此沾沾自喜时,保持克制,坚持对完美、优雅和高性能的代码品味的追求。

技术世界正在迎来一场由大量平庸代码构成的泥石流。但泥石流终会退去,那些在风暴中死守底层常识、拒绝交出思考方向盘的真正工程师,将在废墟之上,重建这个世界的数字基石。

资料链接:

  • https://www.reddit.com/r/webdev/comments/1tvsfgj/im_calling_it_now_the_adoption_of_ai_agents_into/
  • https://geohot.github.io/blog/jekyll/update/2026/05/24/the-eternal-sloptember.html

今日开放讨论:

你同意 Geohot 关于“AI 降低了代码质量,最终会拖垮大企业系统”的悲观论调吗?在你的团队里,是否也出现了“LOC(代码行数)增加,但系统却变得越来越像黑盒”的苗头?

欢迎在评论区分享你的一线工程经历,我们一起在这个狂热的时代保持冷峻的思考!


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

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

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


原「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}


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

© 2026, bigwhite. 版权所有.

别把 Go 写成 Java:毁掉项目从过度架构开始

2026-06-05 08:21:42

本文永久链接 – https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting

大家好,我是Tony Bai。

前不久,Go 语言社区 Reddit (r/golang) 上爆发了两场激烈的争论。

这两个帖子的主题直击了无数 Go 开发者的灵魂深处:

  1. 我们该如何构建一个大型的 Go 模块化单体架构,而不被复杂的“架构设计”淹没?
  2. 为什么现在的 Go 项目里,pkg 和 internal 目录被滥用得如此令人发指?

如果你正在维护一个中大型的 Go 后端项目,你大概率经历过这样的绝望时刻:为了加一个极其简单的业务字段,你需要穿透 handler、usecase、domain、repository、adapter 等足足五层抽象结构;你的项目根目录下躺着一个 pkg 文件夹,里面又套着 internal,代码藏在七八级目录深处。

你以为你在写出业界最高标准的“整洁架构(Clean Architecture)”,但实际上,你正在把 Go 语言写成你曾经最讨厌的“臃肿企业级 Java”。

今天,我们就来透过这层过度工程(Over-engineering)的外衣,看看顶级开发者们是如何打破这种“架构伪神话”,用最符合 Go 哲学的极简方式,构建起能支撑千万级流量的大型单体项目的。

被“标准规范”毒害的洋葱病

在一个全新的 Go 项目立项时,很多技术负责人的第一反应就是去 GitHub 搜一个叫做 golang-standards/project-layout 的高赞仓库,然后照猫画虎地建起一堆目录。

紧接着,悲剧就开始了。综合 Reddit 各位资深大佬的吐血经验,以下两大陷阱,几乎踩中了 90% 的业务团队:

陷阱 1:“死去的” pkg 与被滥用的 internal

帖子原作者一针见血地指出:pkg 目录是时代的眼泪,而 internal 正在遭受前所未有的滥用。

在早期的 GOPATH 时代,我们需要一个地方来区分业务代码和第三方包,于是有了 pkg。但在 Go Modules 已经全面普及的今天,你的代码仓库根目录本身就是一个 Module。在 root 下面再嵌套一层 pkg 纯粹是“脱裤子放屁”——它除了让你的 import 路径变长 4 个字符之外,没有任何实际意义。

更致命的是 internal。官方引入 internal 是为了防止库开发者暴露内部 API 给第三方。但是现在的业务开发团队,为了所谓的“代码隔离”,盲目地把整个 App 的所有核心逻辑全塞进 internal,导致项目结构变成了这样:

internal/app/modules/order/usecase/impl/order.go

当你接手这种代码时,你每天有 30% 的时间在 VSCode 里狂按文件树,试图搞清楚自己到底在哪。

陷阱 2:生搬硬套的 DDD 与洋葱架构(Clean Architecture)

一位在电商公司写 Go 的老哥抱怨道:他试图用严格的 DDD(领域驱动设计)和六边形架构来组织他的模块化单体代码。结果是,随着项目增大,维持这种“整洁”变成了噩梦。

每一次新增功能,都要处理无休止的接口绑定(Wiring dependencies)、防止循环引用,以及为了“解耦”而写的大量毫无意义的样板代码(Boilerplate)。“我感觉自己花在维护架构上的时间,甚至超过了实际交付业务功能的时间。”

记住:Go 语言的灵魂是简单直接。强行引入 Java/C# 语境下的沉重分层,就像给一辆轻巧的保时捷跑车装上了坦克的履带。

为什么“扁平化”才是 Go 架构的尽头?

面对这种极度臃肿的代码,我们在 Reddit 的评论区看到了海外老炮们的共识:Opting for a flatter structure typically guides you organically away from overly nested internal. (选择更扁平的结构,通常能自然而然地引导你远离过度嵌套的代码气味)。

在 Go 语言中,优秀的架构并不是靠“目录分层”来体现的,而是靠“领域边界(Domain Boundaries)”和“依赖流向”来体现的。

真相 1:Package 的划分应该基于“业务能力”,而不是“技术层次”

把项目按 controllers/、services/、models/ 划分是典型的反模式(MVC遗毒)。这种结构下,如果你要修改一个关于“订单”的功能,你必须在好几个目录下反复横跳。

真正懂 Go 的做法是:按领域(Domain)划分子包。 一个 order 包里,就应该包含订单的结构体、订单的仓储接口、乃至相关的处理逻辑。所有的东西都在一起,高内聚。

真相 2:不需要过度设计“防腐层”,直到你真正觉得痛

一些高级开发者指出,他们宁愿花更多的时间去做“事件风暴(EventStorming)”和领域建模,也不愿意去写抽象接口。如果你的 order_repository.go 从第一天起就只有一个 Postgres 实现,且未来三年都不会换数据库,那么你为了“解耦”而提取的一个洋葱接口层,就是纯粹的成本浪费。

大型 Go 项目实用构建指南

抛开那些玄乎其玄的词汇,如果你想构建一个不崩溃的、好维护的大型模块化单体(Modular Monolith),请立刻遵循以下四条“少即是多”的务实法则:

法则 1:干掉 pkg,克制使用 internal

除非你正在写一个准备开源给全世界使用的公共 Library 包,否则你的微服务或单体 Web 应用根本不需要 pkg 目录。

同样,把你的核心代码从深渊般的 internal/app/core/… 中解放出来。把业务包直接平铺在根目录或者按大模块放在一个外层目录即可。让文件树尽可能的“浅”。

法则 2:采用极简的领域扁平结构(Domain-Driven Flattening)

正如评论区大佬给出的终极解法,你的项目结构应该看起来像这样:

cmd/
  server/main.go        // 所有依赖注入和组装都在这里完成(Composition Root)
domain/                 // 或者直接放在根目录
  order/
    order.go            // 领域模型(Entity/Aggregate)
    repository.go       // 接口(依赖倒置,只定义 order 需要什么)
    postgres_repo.go    // 直接在同一个包下实现,或者平铺
  user/
    ...
  catalog/
    ...

不要再建什么 port 和 adapter 文件夹了!order.go 就是你的核心,postgres_repo.go 就是它的具体实现。它们呆在一个包里,简单明了,任何人 grep 搜索一下就能秒懂。

法则 3:让 Consumer 定义接口(Interface Segregation)

很多人为了解耦,喜欢在一个单独的 interface 包里定义全局接口,这又是 Java 思维作祟。

在 Go 里,接口应该是“隐式实现”的。不要在提供者(Provider)端定义接口,要在消费者(Consumer)端定义。

比如 order 包需要发邮件,它不应该去依赖 email 包的接口。它应该在自己的包里定义一个极小的 type Mailer interface { Send(…) },然后在 main.go 中把真正的 Email 服务注入进去。这就是 Go 解除循环依赖的最强法宝。

法则 4:一切脏活累活,全扔进 main.go

对于单体应用来说,不要试图在每个模块内部做复杂的自动依赖注入(Autowiring)或自启动钩子。

保持每个模块都是极度干净、被动的。然后在你唯一的 cmd/server/main.go 里,显式地初始化数据库、初始化各个模块、然后手动把它们组装(Wire)在一起。是的,这个 main.go 可能会有几百行甚至上千行,但它让你在启动时一目了然,排查问题再也不用像个无头苍蝇一样在迷宫里乱撞了。

小结:回归大道至简

不管是摒弃 pkg,还是剥离 500 层的“整洁架构”,这背后体现的其实是 Go 语言最深刻的哲学:Pragmatism(务实主义)。

技术架构的终极目标,是为了让人读得懂,让业务跑得快,而不是为了满足程序员在代码里“建构精密钟表”的虚荣心。

如果你的代码不能让人在 30 秒内找到修改点,不能让你通过一个简单的 grep 搜索就锁定业务逻辑,那么不管你的架构图画得多么符合六边形、洋葱或者 DDD 规范,它都是一个失败的设计。

所以,立刻打开你的 IDE,试着把你那些嵌套了五六层的文件夹拖出来吧。相信我,当你删掉那一堆废话般的中间层接口时,你会感受到前所未有的舒畅。

资料链接:

  • https://www.reddit.com/r/golang/comments/1tftqpj/how_do_you_structure_and_maintain_large_go/
  • https://www.reddit.com/r/golang/comments/1tft8ds/pkg_internal_directories_are_way_overused/

今日互动探讨:

在你的 Go 项目里,曾经为了遵循所谓的“规范设计”做过哪些现在看起来极其离谱的过度工程?你现在的项目是扁平结构还是洋葱结构?

欢迎在评论区留言晒出你的代码结构,或者 @出那个每天沉迷于建文件夹的同事。让我们一起探讨,什么是真正的“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}


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

© 2026, bigwhite. 版权所有.

开源维护者的困境

2026-06-04 08:10:24

本文永久链接 – https://tonybai.com/2026/06/04/the-maintainers-dilemma

大家好,我是Tony Bai。

开源软件的繁荣建立在一种隐形的“社会契约”之上:贡献者贡献智慧,维护者投入精力审核。然而,当维护者面对成百上千个待处理的拉取请求(PR)而精疲力竭时,这个契约正滑向崩塌。

AI 的介入似乎提供了一线生机,但也带来了一个灵魂拷问:如果代码是 AI 写的,审核也是 AI 做的,那么“受保护的分支”究竟是在保护什么?开源社区赖以生存的“人与人的连接”是否会随之消失?前Go 语言核心团队成员、gohugo和Cobra 创始人 Steve Francia 近期撰写了一篇文章,深度剖析了这一“维护者的困境”。

本文便是这篇文章的中译文。


受保护的分支(protected branch)需要第二个人在代码发布前进行审核。这条规则的存在是因为人类会犯错,而第二双眼睛可以捕捉到第一双眼睛遗漏的东西。但如果其中一个审核者是机器人呢?如果两个都是呢?

目前,我可以要求 AI 在我的仓库里发起一个拉取请求(PR),然后由我自己合并它。或者我可以自己写代码,让 AI 来审核。在这两种情况下,分支在技术上都是“受保护的”。但这种保护现在究竟意味着什么?

这些问题值得思考。但它们往往占据了太多的注意力,而一个更迫切的问题却无人问津:现在,在我的各个仓库中,都有来自那些花时间理解代码库、编写测试并提交简洁补丁的人们的未处理拉取请求。我还没审核它们。遗憾的是,讽刺的是,我没审核是因为我深深地在乎。我知道花时间在一个项目上发起 PR 是多么大的事,对于那些我作为志愿者维护的项目更是如此。对于每一个拥有受资助维护者的开源项目,都有数以百万计的未付报酬的人类正盯着日益增长的待办事项,思考着这个周末是该花在处理问题上,还是直接合上电脑出门去。

AI 工具现在可以进行可靠的代码审查、编写补丁和分拣问题。问题不再是它们是否足够好到有用。真正的问题在于,“有用”在何处变成了“负担”,以及过度依赖我们无法轻易重建的东西——维护者与贡献者之间、通过经验积累的判断力,以及围绕这种交流形成的社区——是否会造成破坏。

118 个待处理的拉取请求

我上周查看了 GitHub 通知,然后直接关闭了标签页。Cobra 有 243 个未解决的问题(issues)和 118 个待处理的拉取请求(PR)。Afero 有 114 个问题和 55 个 PR。这两个项目都是我创建的。

尽管我没有及时行动,但这些都是活跃维护的项目。Cobra 支持着 kubectl、GitHub CLI、hugo 以及成千上万的其他工具。当你输入 kubectl get pods 或 gh pr list 时,Cobra 正在解析你的命令。Afero 存在于 Hugo 内部,也存在于 Cobra 自身,以及数以百计的其他项目中。对 Cobra 的一次草率合并可能会破坏 Kubernetes 的工具链。对 Afero 的一次错误审核可能会开启一个静默传播到下游所有环节的文件系统漏洞。

我创建 Cobra 是因为我需要为 Hugo 提供特定的 CLI 用户体验,而当时没有现成的库可以支持。我将它拆分为一个独立项目,想着其他人可能会觉得有用。我从未想过十年后我还在维护它,也没想到这两个项目会成为这么多人的关键基础设施。我只是想做些有用的东西,也许能交几个朋友。但开源意味着我有义务无限期地维护它吗?随着我发布的每个新项目,维护旧项目的时间就越来越少。有些 PR 已经等了三年了。在 Afero 的 BasePathFs 中有一个已报告的安全漏洞,自从 2025 年 6 月起就挂在那里——直到写这篇文章之前,我都还没意识到它在那里,因为积压工作太惊人了。

维护的数学逻辑行不通。这是一个众所周知的开源问题(相关 XKCD 漫画)。贡献的数量增长速度远超维护者的数量,且随着项目的复杂性和影响力的增加,审查每个 PR 所需的时间也在增长。有些项目能吸引志愿者维护者,但这又带来了新问题:没有人对全局负责,每个人都只挑选对自己重要的事情,剩下的就随它去。Cobra 故意设计得节奏缓慢——有太多的项目依赖它,不能草率合并任何内容——因此每次更改都需要更彻底的审查,而不是更少。我的许多其他项目则掉进了既被维护又被遗弃的灰色地带。我会将其描述为针对最关键路径优化的维护,但这种区别对八个月前提交了修复方案且从未得到回音的人来说,意义并不大。

这不仅仅是我的问题。GitHub 托管着超过 4.2 亿个仓库。我有幸成为 Secure Open Source Fund 首批资助对象的一员——这是一项真正产生了影响的投资。但即使在经过几个周期的扩展后,它也只覆盖了约 200 个项目。OpenSSF 每周扫描数百万个关键项目。Tidelift 向维护者支付报酬。把这些加起来,你也只覆盖了成千上万个项目。这虽然很有意义,但与实际的表面积相比只是杯水车薪。

百分之九十六的代码库包含开源组件,而它们赖以生存的基础是由盯着永远清不空的待办事项的人类维持的,他们思考着是否这就是他们最终耗尽精力或干脆停止查看的周末。随之而来的还有维护者的愧疚感——明知道人们指望着你的工作,而你却没有能力帮忙,但又无法撒手不管。

进入机器人时代

我一直在几个仓库里尝试 AI 工具——比如在 fileflow 上的 Jules 和在 pathologize 上的 AI 尝试,这些仓库依赖较少,有更多尝试空间。我也一直在 Afero 上运行 GitHub Copilot,它有更多依赖,但其模块化架构允许我扩展新后端而不触及其他项目依赖的关键路径。

我去了一次邮轮旅行。当我在海上时,Jules 还在继续工作,每天都会发起新的 PR,因为我还没来得及合并第一个。等我回到家时,这两个项目已经有了超过 120 个 PR。我抽出一个早晨来审核它们,却发现它们其实代表了大约五个不同的更改集,每个更改集都在几周内每天提交一次。PR 本身并没有错,Jules 确实发现了真实的问题。但没有一个 PR 是完全正确的;在合并之前,每个都需要修正。在 Jules 提供的指导下,我做了调整,总体方向显示出前景。但实验目前带来的维护工作量是增加了,而不是减少了:我必须核实这 120 个 PR 中每一个是否真的是重复的,然后才能关闭。本意是减少积压工作的工具,反而增加了积压。

Jules 发起的这些 PR 署名是我,而不是 Jules——这引发了关于归属和责任的问题。从仓库的角度看,我是这些更改的作者。但我一行代码都没写。如果其中一个补丁引入了 Bug 或漏洞,提交历史记录指向的是我。大多数贡献者政策在编写时并未考虑到这种情况,标准的 CLA(贡献者许可协议)也不区分人类编写的代码和人类指导 AI 编写的代码。

目前看来,Jules 似乎没有关于其之前工作的记忆,也没有检查未处理 PR 的能力。它扫描仓库,发现问题,发起 PR,然后停止。如果你不合并,Jules 下次扫描时会发现同样的问题并再次发起 PR。它没法知道你已经意识到了问题但还没合并,原因可能是:你不同意这个修复,或者修复优先级较低,或者你正在船上度假且两周内没法上网。这种语境对工具来说是不可见的。Jules 发现了一个真实的漏洞——文件操作中的 TOCTOU(检查时间到使用时间)漏洞——它是对的,它指出了这一点……指出了 12 次。

对于机械性的工作——标记问题、更新依赖、起草样板回复——这些工具确实非常有用。但 Jules 和 Copilot 无法告诉我,这 55 个 Afero 的 PR 中,是否有一个根本不属于这个项目。这种判断需要了解代码库的过去和未来,而不仅仅是它的现状。

这些工具只能基于可见的事物工作:代码、未解决的问题、PR 历史。维护者的约束条件是那些没人写下来的东西:内部辩论如何塑造了 API。人类判断力最无可替代、AI 最盲目的鸿沟,就在这两者之间。

曾和我一起在 Go 团队工作的 Russ Cox 在最近的一次关于 AI 贡献的讨论中说得很好:“人们吹嘘代码库有成百上千行,是由 AI 在创纪录的时间内完成并提交的。仔细观察会发现,这些代码库往往更像是跳舞的大象,而不是有用的工程产物。”

他是对的。但我一直在思考代码之外的事情。编写新软件和维护现有软件是有区别的。更新依赖并不是跳舞的大象。分拣一个陈旧的问题并不是创造性行为。告诉一个贡献者“谢谢,但我们不接受对这个 API 的更改”只是在维持运营。而现在,对于数百万个项目来说,灯已经熄灭了。

这还不是最大的挑战。大多数人没意识到的是,评估和合并更改比编写新代码要难得多。理解一个更改如何融入现有的代码库、它的历史以及它的计划,需要一部分隐形的知识——这些知识存在于创意工作中,需要某种目前没有模型能复制的判断力。

“受保护”到底保护了什么

Go 项目对我来说真的很美——那是运行了 15 年、极其细致的评审、设计讨论和精炼的评审文化。那是理想状态。但 Go 是个例外,大多数项目无法企及:由 Google 资助的全职贡献者,一项旨在持续 50 年且不受外部截止日期压力的任务。

Go 团队最近有一个长长的讨论,关于是否接受 AI 生成的贡献——Russ Cox 的名言也源自那个讨论。这些人我共事多年——同样的评审、同样的方案、在同样的白板前争论。阅读那个论坛线程,我能听到他们的声音。我能看到他们每个人是如何坚持自己认为正确的事情,以及为什么。

Rob Pike 第一个发言且毫不含糊。这是一条非常危险的道路。在你的第一步上要小心。我建议简单地说“不”。那是 Rob。直接、原则性强,且通常是正确的。然后 Alan Donovan 指出了不舒服的现实:“我怀疑我们今天收到的一大部分 CL(更改列表)已经包含了 LLM 生成的代码,无论作者是否承认。马已经跑出马厩了。”

Russ Cox 写下了我见过的最深思熟虑的回应。他的核心观点是:“我们能做的最重要的事情是维持我们平时的代码评审和代码质量标准……当代码的部分或全部是在 AI 工具的帮助下编写时,同样的标准必须适用。”以及:“当你使用 AI 工具完成工作时,你的责任并不会减轻。”

这些立场中的每一个都是合理的。每一个都基于一个假设,而这个假设揭示了困境的核心:他们假设有人类可以进行评审

Go 能负担得起“维持同样的标准”,因为它有全职贡献者。它能负担得起“直接说不”,因为 Go 有足够多的人对重要的事情说“是”。

Afero 没有。大多数开源项目没有。当 Rob Pike 说“不”时,Go 项目保持运行。当我说“不”时,PR 就挂在那里。那是不同种类的“不”。

这里有一个光谱,你落在哪里取决于你究竟在两者之间如何权衡。在实践中,维护者面临五个选项:

  1. 人类编写,人类审核。
  2. AI 编写,人类审核。
  3. 人类编写,AI 审核。
  4. AI 编写,AI 审核,人类点击合并。
  5. AI 编写,AI 审核,AI 点击合并。

列表中的每一步通常都是在用严谨性换取速度,用信任换取吞吐量。但对于大多数人类或 AI 都不评审的 PR,根本谈不上标准。

我们真正保护的是什么

当维护者评审贡献者的 PR 时,存在一个潜规则(契约)。贡献者投入数小时理解代码库、编写测试并提交干净的内容。评审者投入数小时进行评估、打回并提出改进建议。双方都在学习。评审者理解了项目的一个新角落。贡献者学会了更好地使用代码库的惯用法。这种关系形式。这种交流是使开源成为一个社区,而不仅仅是供应链的重要原因。

Bryan Cantrill 在 Oxide 描述了这种关于 LLM 使用的内部政策:通常,“读者和作者都默认,是编写者付出了更大的智力劳动。”当内容是 AI 生成时,“这个社会契约就变成了作者付出的努力最少。如果双方都没有付出努力,那么评审还有什么意义?”Oxide 的答案是,无论如何人类都要负责;工具不吸收责任。这是正确的直觉。但它假设有人真正在那里承担责任。

对于大多数项目,根本没有人在评审。社会契约不是被 AI 破坏的——它正被沉默破坏。六个月前提交了一个干净、测试完备的补丁却从未收到回音的贡献者,并没有体验到一个退化版的理想契约。他们什么也没体验到。

一个不完美的社会契约,是否好过一个从未发生的完美契约?

来自 AI 的在一天内的响应,可能比来自人类的永远的沉默更受尊重。

前方的实验

我决定弄清楚到底怎么回事。我在 Afero 上看到了 55 个尚未处理的 PR 请求,显然,这种拖延态度本身就已经构成了一种忽视行为。

AI 工具会让我更投入,让我从那些本不需要我的决策中解脱出来吗?还是会让我感觉连接更少——人类元素又减少了一层?我不知道让 AI 评审 PR 而不是人类评审是什么感觉,也不知道当双方的努力都减弱时,问责制是否还存在。这就是实验。

Russ 在那个讨论中还说了另一句话,我一直在回味:“最重要的事情是保持思考。工具让关掉大脑变得非常容易,但如果你小心避开那个陷阱,你就能产出好的成果。”这就是我要尝试走的路。让 AI 处理大量数据吧。而我自己则要继续负责做出正确的判断。

没有一个通用的政策可以同时适用于 Go 和 Afero。也不应该有。

受保护的分支依然受保护。我只是不再确定那究竟意味着什么。

你遇到过这种情况吗?我特别想听听那些尝试过使用人工智能进行代码审查的维护人员的意见——哪些方面运作正常,哪些又出现了问题。

原文地址:https://spf13.com/p/the-maintainers-dilemma/


今日互动探讨

“如果一个 AI 能够修复你项目中困扰已久的 Bug,但由于它是 AI 生成的,没有人能完全解释其每一步的逻辑,你会选择合并它吗?”

在开源社区的未来,我们究竟是在守护代码的质量,还是在守护人类参与的痕迹?欢迎在评论区分享你的看法。


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

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

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


原「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}


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

© 2026, bigwhite. 版权所有.

AI 时代如何真正掌握一门新技术?这份非主流学习指南建议永久收藏

2026-06-04 08:08:24

本文永久链接 – https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide

大家好,我是Tony Bai。

最近,在开发者社区 Reddit 的 Golang(Go语言)板块上,一个求助帖引发了跨越语言和技术栈的集体共鸣。

发帖人是一位刚入行两年的新人,他的帖子大意是:

“我很迷茫。在这个AI时代,大家似乎都在用大模型疯狂地构建项目、飞速向前。如果我按照传统方式,看书、查文档、一行行敲代码,就会觉得自己慢得像个古董,正在被时代抛弃。

但当我向AI要答案时,我又觉得我根本不是在编程,我只是个在中间倒腾提示词的传话筒。看着那些跑起来的代码,我感到无比空虚——我感觉自己像个骗子,我根本没有真正掌握它。在AI时代,我到底该怎么学习?”

这个帖子之所以能得到成百条回复,是因为它戳破了当下几乎所有技术学习者的隐秘焦虑:当AI 能秒出代码、秒给方案时,我们该如何建立属于自己的、不可替代的技术壁垒?

如果你的学习方式依然停留在“遇到问题 -> 丢给AI -> 复制粘贴 -> 跑通收工”的循环中,那么你正在主动将自己推向被AI淘汰的边缘。

在这篇文章中,我们将结合这场技术社区的讨论,为你拆解一套在AI时代真正掌握一门新技术(我们以崇尚极简的Go语言为例)的“非主流”学习指南。

为什么“AI代写”是一粒甜美的毒药?

在Reddit的讨论区中,一位资深开发者留下了这样一句警示:

“Remember, lines produced are lines spent; not achieved.”(记住,生产出来的代码行数,是你的负债,而不是你的成就。)

在非AI时代,写代码的行数代表着你的思考与劳动;但在AI时代,生成一万行代码可能只需要几十秒钟。很多人因此陷入了“效率幻觉”,看着屏幕上飞速滚动的代码,误以为自己的能力也随之暴涨。

这是一种极度危险的认知幻觉。

1. 认知深度的“折叠”

编程不仅仅是输出语法,更核心的是在脑海中建立逻辑模型。当你遇到一个并发瓶颈或内存泄漏问题时,你为了排查它而去翻看源码、对比不同的垃圾回收机制、调整参数——这整个“痛苦挣扎”的过程,正是你大脑神经元建立连接、内化技术底层逻辑的唯一途径。

如果你直接问AI“怎么解决”,AI会直接把改好的代码喂给你。你跳过了挣扎,也就跳过了认知。你的技术肌肉不仅没有得到锻炼,反而开始萎缩

2. 丧失对复杂系统的控制力

用AI拼凑出来的项目,在初期确实能跑得很快。但因为你没有亲手参与底层架构的微调,随着项目规模扩大,各个模块之间的耦合、并发冲突、边界条件会像雪崩一样爆发。由于你缺乏对这些代码的“微观掌控力”,一旦AI也无法给出正确答案时,你将面对满屏报错束手无策。

Senior与Junior的AI使用界限

在技术团队中,你会发现一个有趣的现象:资深工程师(Senior)用AI效率翻倍,而初学者(Junior)用AI却越来越平庸。

这背后的本质差异在于:你是否拥有“代码品味(Code Smell)”和“系统直觉”。

  • 资深工程师的模式:【主导与审查】

高级开发人员对系统架构、设计模式、性能瓶颈有着深刻的肉体记忆。当他们使用AI时,他们把AI当作一个速度极快的“草稿撰写员”。AI给出的方案,Senior一眼就能看出哪里有潜在的内存泄漏,哪里不符合并发安全。他们是在评审(Review) AI,始终掌握着主导权。

  • 初学者的模式:【盲从与执行】

初学者由于没有建立起完整的技术品味,无法分辨AI给出的方案到底是优雅的还是埋了雷的(即AI生成的“Slop/代码垃圾”)。初学者往往选择无条件信任,甚至连变量名、异常处理都直接套用。

一位大厂技术面试官在贴子中坦言:

“在最近的面试中,我看到了初级候选人理解能力的全面崩溃(collapse of comprehension)。他们能用AI在10天内做出一套复杂的分布式系统,但当我问及其中一个数据一致性问题是如何在Go中保证的,或者让他们手写一个简单的通道(channel)协作时,他们彻底哑口无言。”

这就是盲目依赖AI代写的代价:你以为你开挂了,其实你只是把自己的大脑外包了。

非主流学习指南(以Go语言为例)

那么,在AI时代,正确的学习姿势到底是什么?这套“非主流”路径建议你打印出来,贴在电脑旁。

第一步:开启“Cold Turkey(冷火鸡)”阶段,强制肌肉记忆

在学习一门新技术(如Go语言)的前几个月,请狠心关掉你IDE里的所有AI辅助插件(如Copilot、Cursor的Tab补全)。

Go语言的设计哲学是 “Clear is better than clever”。它的语法极其克制,没有复杂的语法糖。这使它成为最适合用古法一行行敲击来建立肌肉记忆的语言。

  • 亲手去写每一个 if err != nil 的错误处理;
  • 亲手去体验指针传递与值传递的区别;
  • 亲手写一个基础的 for range 循环。

在这个阶段,痛苦是你的朋友。那些因为拼写错误、类型不匹配导致的编译失败,正是你建立语言直觉的养料。

第二步:系统化输入优先(先建立拼图框,再填充碎片)

AI最擅长提供零散的代码片段,但它无法为你提供系统的知识框架。因此,必须坚持阅读经典。

  • 官方 Spec 优先:去读Go的官方文档《Effective Go》,去理解为什么官方不推荐使用过于复杂的技巧,而是强调代码的可读性。
  • 经典图书不可替代:通读一本如《The Go Programming Language》这样的硬核著作,或《Go语言第一课》这样的系统化的专栏。书本/专栏能够提供一条由浅入深、逻辑连贯的学习脉络,这是AI那碎片化的回答永远无法提供的。

第三步:将AI角色重塑为“苏格拉底私人导师”

这是整套指南中最关键的改变:禁止让AI帮你写代码,强制让AI教你思考。

每次遇到难题,不要问 “帮我用Go写一个高并发的爬虫”,而是使用以下苏格拉底提问提示词(Prompt Template)

苏格拉底学习 Prompt 模板:

“我现在正在学习Go语言的 [并发控制/通道/接口] 概念。在解决 [具体问题] 时,我卡住了。请你扮演一位资深的、注重启发式教学的导师。

在接下来的对话中,请严格遵守以下规则:
1. 绝对不要直接给我写出最终的代码答案。
2. 请指出我思路中可能存在的盲区或不合理的设计。
3. 用反问、类比或拆分步骤的方式,一步步引导我自己写出正确的代码。
4. 如果我的代码运行出错,请帮我分析报错信息背后的底层逻辑,而不是直接给出修改后的代码。

我的初步代码/想法如下:[贴出你的尝试]

通过这种方式,AI从一个“抢你饭碗的枪手”,变成了一个“24小时无条件陪伴、温和且博学的私人教授”。

第四步:构建“双向反馈回路”

  1. 自己先写:哪怕写得再烂,也要自己先用最基础的方式把功能实现。
  2. 让AI Review:功能跑通后,把代码发给AI:“这是我自己实现的Go并发下载器。请站在资深Go开发者的角度,帮我挑挑刺。这里有没有通道泄露的风险?有没有更地道的写法(Idiomatic Go)?”
  3. 对比重构:理解AI给出的优化建议,然后关掉AI的窗口,自己手动在编辑器里把优化后的代码重写一遍

小结:在无限代码的时代,做掌握源头的人

在这个时代,最不缺的就是代码。随着大模型代码生成能力的指数级演进,写代码的成本正在无限趋近于零。

但正因如此,能够看懂代码、评估系统风险、做出架构决策的人,其价值正在成倍增长。

  • 平庸的开发者:只学会了如何向AI索要现成的螺丝钉,一旦系统倒塌,他们不知道哪颗螺丝出了问题。
  • 顶级的开发者:借助AI导师,以极快的速度弄懂了整个系统的构造原理,他们亲手组装,对每一个接口、每一次并发、每一处内存分配都了如指掌。

在AI时代,学习技术不是为了和AI比拼速度,而是为了借由AI的博学,更快、更深地抵达技术的本质。

关掉你的IDE/Copilot自动补全,打开一本经典的Go语言书,准备好你的键盘。

属于你的深水区探索,才刚刚开始。

资料链接:https://www.reddit.com/r/golang/comments/1tsxbd4/how_do_you_guys_actually_learn_stuff_in_this_ai/


为了便于你随时温习,我将这套“AI时代非主流学习法”整理成了4条核心原则,建议截图保存:

  1. 主动戒断,重建肌肉记忆:在学习一门新技术(如Go语言)的前期,强制关闭所有AI代码自动补全。像前AI时代的程序员一样,亲手敲下每一行代码、解决每一次报错。
  2. 系统输入,构建认知地图:拒绝用碎片化的AI回答代替系统学习。坚持阅读官方规范(Spec)和经典书籍,先在脑海中画出技术拼图的“边框”。
  3. 重塑定位,将AI降级为导师:严禁向AI要直接的代码答案。使用“苏格拉底式提示词”,引导AI指出你的逻辑漏洞、解释底层原理、启发你独立思考。
  4. 闭环反馈,完成深度重构:永远坚持“自己先写 -> AI审查 -> 闭环重构”的三步法。在对比与亲手重写中,真正内化代码的“好坏品味”。

今日开放讨论

学习的本质是思维的碰撞,面对汹涌而来的AI浪潮,我想听听你的真实想法:

  1. 你目前在学习或工作时,对AI(如GitHub Copilot, Cursor, Claude Code等)的依赖程度有多高?
  2. 在日常开发中,你是否也曾经历过“代码虽然跑通了,但感觉自己像个骗子”的空虚瞬间?你是如何克服这种技术焦虑的?
  3. 除了文中提到的“苏格拉底提问法”,你在用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}


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

© 2026, bigwhite. 版权所有.

Go 生态17年大浪淘沙:2026年最值得引入的10个“神仙级”QoL工具包

2026-06-03 07:48:26

本文永久链接 – https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026

大家好,我是Tony Bai。

在软件工程中,有一个词叫 QoL(Quality of Life,生产体验/开发幸福感)

Go语言(Golang)凭借极简的语法、强悍的并发能力和超快的编译速度,成为了现代后端和云原生的绝对主力。但坦率地说,Go在某些时候的开发体验并不算完美:为了坚持“显式优于隐式”的原则,我们不得不手写大量的样板代码(Boilerplate),甚至在处理路由、数据库迁移、环境配置时,常常感到有些繁琐。

Go诞生至今已经17年。到了2026年的今天,Go生态经历了大浪淘沙般的洗牌。曾经风靡一时的保姆级“全家桶”框架逐渐失宠,取而代之的是“轻量、模块化、对标准库极度友好”的拼图式架构

今天,结合Go开发者社区的共识,我为你整理出2026年最值得引入的10个“神仙级”QoL工具包。它们不改变Go的底层哲学,却能让你的开发体验、代码品味和生产效率产生质的飞跃。

数据库编译器:sqlc(类型安全的终极救星)

  • 解决痛点:传统的 ORM(如 GORM)依赖大量的运行时反射,性能较差,且字段写错只有在运行时才会崩溃;手写 database/sql 又有太多的字符串拼接和样板代码。
  • 神仙之处:sqlc 改变了游戏规则。你只需要写原生 SQL 语句,它就会帮你生成100%类型安全、无反射、编译期排错的干净 Go 代码。
  • 实操场景

首先编写原生的 SQL 语句文件:

-- name: GetUser :o ne
SELECT * FROM users WHERE id = $1 LIMIT 1;

运行 sqlc generate,它会自动为你生成编译期安全的 Go 函数。你直接调用即可,性能等同于手写原生代码,且任何 SQL 语法错误都会在编译阶段被捕获:

user, err := q.GetUser(ctx, userID)

标准库路由增强:chi(优雅的轻量骨架)

  • 解决痛点:很多大框架侵入性太强,自定义了大量的 Context 和 Handler 签名,与标准库 net/http 严重割裂。
  • 神仙之处:chi 100% 兼容 Go 标准库的 http.Handler。它不试图替代标准库,只是在标准库之上优雅地实现了路由分组、路径参数解析和中间件。
  • 实操场景
r := chi.NewRouter()
r.Use(middleware.Logger) // 极简的中间件支持

r.Route("/v1/api", func(r chi.Router) {
    r.Get("/users/{id}", getUserHandler) // 完美的路径参数支持
})

PostgreSQL 黄金搭档:pgx(告别底层的平庸)

  • 解决痛点:标准库的 database/sql 为了通用性,抹平并折损了特定数据库的优秀特性。
  • 神仙之处:如果你在 2026 年使用 PostgreSQL,pgx 是无可争议的行业标准。它不仅速度比通用驱动快数倍,还完美支持 Postgres 特有的二进制协议、批量导入(Copy Protocol)以及复合类型。
  • 实操场景
// 使用 pgx 独有的高效率批量插入,比一条条 INSERT 快一个数量级
rows := [][]any{
    {"John", "Smith"},
    {"Jane", "Doe"},
}
copyCount, err := conn.CopyFrom(
    context.Background(),
    pgx.Identifier{"people"},
    []string{"first_name", "last_name"},
    pgx.CopyFromRows(rows),
)

终极断言利器:testify(让测试回归享受)

  • 解决痛点:Go 官方自带的测试没有提供 Assert 方法,导致断言里充斥着枯燥的 if got != want { t.Errorf(…) }。
  • 神仙之处:testify 是Go测试生态的无冕之王。它提供极其直观、可读性拉满的断言 API,同时完全不改变 go test 的运行机制。
  • 实操场景
import "github.com/stretchr/testify/assert"

func TestCalculate(t *testing.T) {
    res, err := Calculate()
    assert.NoError(t, err)          // 优雅的无错断言
    assert.Equal(t, 42, res)         // 简洁的值断言
}

结构化日志标配:log/slog(官方终结战争)

  • 解决痛点:第三方日志库(Zap, Logrus)割裂了社区,引入它们往往会带来沉重的外部依赖和版本冲突。
  • 神仙之处:Go 内置的 slog 自 1.21 版本起已成为官方推荐的结构化日志方案,大幅降低了引入第三方日志库的必要性。作为标准库,它提供了高性能、标准化的结构化日志输出,完美支持 JSON 格式,直接节省了引入第三方日志库的开销。
  • 实操场景
import "log/slog"

// 输出标准的JSON结构化日志,无缝接入ELK或Loki
slog.Info("payment_processed",
    slog.String("tx_id", "tx_998"),
    slog.Float64("amount", 299.9),
)

云原生配置解析:caarlos0/env(让环境变量回归整洁)

  • 解决痛点:使用 Viper 解析配置过于沉重,配置文件格式(JSON/YAML)在云原生和 Docker 容器部署中往往不如环境变量灵活。
  • 神仙之处:符合“12-Factor App”原则,通过 Struct Tag 极其优雅、轻量地解析环境变量,避免了繁琐的手工类型转换。
  • 实操场景
type ServerConfig struct {
    Port    int      env:"PORT" envDefault:"8080"
    APIKeys []string env:"API_KEYS" envSeparator:","
}

cfg := ServerConfig{}
if err := env.Parse(&cfg); err != nil { // 一步完成类型转换、默认值注入和必填校验
    log.Fatal(err)
}

优雅的 CLI 构造器:alecthomas/kong(告别 Cobra 的臃肿)

  • 解决痛点:Cobra 虽有名,但代码生成量巨大,API 极其复杂,对轻量级 CLI 工具来说显得有些喧宾夺主。
  • 神仙之处kong 采用“声明式”设计,你只需要定义一个 Go 结构体,它就会自动为你生成命令行解析、子命令路由和极其美观的 –help 自动生成。
  • 实操场景
var CLI struct {
    Ping struct {
        Host string help:"Host to ping." required:""
    } cmd:"" help:"Ping a host."
}

ctx := kong.Parse(&CLI)
// 根据子命令自动路由,结构极其清晰

数据库版本控制:pressly/goose(丝滑的数据库迁移)

  • 解决痛点:在团队协作中,数据库 Schema 的变更同步和回滚往往非常混乱。
  • 神仙之处goose 支持用纯 SQL 或 Go 代码编写迁移脚本,完美支持向前/向后(Up/Down)版本控制,能无缝嵌入到 CI/CD 流程中。
  • 实操场景

在终端中简单执行:

# 使用环境变量方式(更简洁)
# 创建一个迁移文件
# 在生成的 sql 文件中写入 DDL,运行 goose up 即可安全升级
GOOSE_DRIVER=postgres GOOSE_DBSTRING="postgres://user:pass@localhost/dbname" \
  goose create add_users_table sql

# 或完整传参方式
goose postgres "postgres://user:pass@localhost/dbname" create add_users_table sql

摆脱 Makefile:go-task/task (Taskfile)(跨平台任务编排)

  • 解决痛点:Makefile 语法晦涩且多平台不兼容,在 Windows 平台上的支持体验较差。
  • 神仙之处task(Taskfile)使用直观的 YAML 语法,跨平台通用,支持任务依赖分析、条件执行和极佳的终端输出。
  • 实操场景

在根目录下编写 Taskfile.yml:

version: '3'
tasks:
  build:
    desc: Build the go binary
    cmds:
      - go build -o myapp main.go
  test:
    desc: Run unit tests
    cmds:
      - go test -v ./...

热重载神器:air-verse/air(让本地开发如丝般顺滑)

  • 解决痛点:每次修改 Go 代码后,都需要手动在终端执行 Ctrl+C 然后重新编译运行,严重打断开发心流。
  • 神仙之处air 监听项目目录的文件变动,在后台自动、极速地重新编译并运行,带给 Go 开发者不亚于前端热更新的实时反馈体验。
  • 实操场景

在项目根目录直接输入:

air

从此放开双手,专注于代码的编写,保存即生效。

2026年Go开发者的“神仙套包”黄金搭配图

小结

Go 生态的发展,是一个从“迷信全家桶大框架”回归到“小而美精细化拼装”的过程。

这 10 个神仙级 QoL 工具包,没有任何一个是试图颠覆 Go 语言设计哲学的。相反,它们都像一块块精密的齿轮,严丝合缝地扣在标准库周围,默默地为你扫清开发路上的琐碎障碍。

用最克制的框架,写最健壮的代码。这,才是 2026 年写 Go 该有的风骨。

资料链接:https://www.reddit.com/r/golang/comments/1tryel9/im_new_to_golang_which_are_the_quality_of_life/


今日开放讨论

  1. 在这 10 个神仙级 QoL 包中,你已经在生产环境使用了哪几个?哪个工具最能提升你的开发“幸福感”?
  2. 在 ORM 选型上,你更青睐传统的 GORM、Ent,还是文中推荐的、编译期安全的 sqlc?为什么?
  3. 你觉得 Go 官方未来应该把今天提到的哪个包(如 testify 的 assert 功能)直接吸送到标准库中?

欢迎在评论区分享你的实战经验与深度见解,让我们一起精进代码品味!


还在为写 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}


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

© 2026, bigwhite. 版权所有.