<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tony Bai</title>
	<atom:link href="http://tonybai.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Mon, 08 Jun 2026 23:32:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>终结十年纠结：Go 新提案允许 Example 支持任意函数签名</title>
		<link>https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures/</link>
		<comments>https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures/#comments</comments>
		<pubDate>Mon, 08 Jun 2026 23:31:24 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Example函数]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go-doc]]></category>
		<category><![CDATA[go-test]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[pkgsite]]></category>
		<category><![CDATA[synctest]]></category>
		<category><![CDATA[testing包]]></category>
		<category><![CDATA[代码解耦]]></category>
		<category><![CDATA[函数签名]]></category>
		<category><![CDATA[单元测试]]></category>
		<category><![CDATA[实用主义]]></category>
		<category><![CDATA[文档渲染]]></category>
		<category><![CDATA[样板代码]]></category>
		<category><![CDATA[测 试框架]]></category>
		<category><![CDATA[示例代码]]></category>
		<category><![CDATA[编程哲学]]></category>
		<category><![CDATA[虚拟时钟]]></category>
		<category><![CDATA[错误处理]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6429</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures 大家好，我是Tony Bai。 在 Go 语言的开发日常中，编写 ExampleXxx 示例代码不仅是完善文档的必经之路，更是一门绝佳的“活文档”艺术。 通过在 “&#95;test.go” 文件中编写以 Example 开头的函数，并在末尾加上 // Output: 注释，Go 官方的 go doc 和 pkgsite 就能在网页上直接渲染出可交互、可直接在浏览器中运行（Playable）的示例代码。 然而，在这个看似优雅的设计背后，却隐藏着一个让全球 Go 工程师如鲠在喉、折磨了大家近十年的“硬伤”：Go 官方对 Example 函数的签名有着极其死板的限制——它必须是无参、无返回值的空函数。 为了这个限制，我们在写文档示例时，不得不写出大量极度违背 Go 地道（Idiomatic）编程哲学的样板代码。 为了彻底拔掉这根刺，Go 编译器团队核心成员Damien Neil (neild)提交了一项被称为“大一统”的提案——Issue #79808：允许 Example 示例支持任意函数签名！ 这项提案不仅终结了社区自 2017 年以来的长期争论（#21111 与 #64993），更用一种极其巧妙且务实的“解耦设计”，为 Go 语言的文档生态减负。 历史的疮疤：为了写好一个示例，我们被迫说了多少“废话”？ 在真实的 Go 工程中，几乎所有的文件读写、网络调用都会返回 error。按照 Go 的地道写法，当我们调用一个可能失败的函数时，最自然的反应是直接将错误向上抛出： // [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/go-proposal-examples-to-support-arbitrary-function-signatures-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures">本文永久链接</a> &#8211; https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures</p>
<p>大家好，我是Tony Bai。</p>
<p>在 Go 语言的开发日常中，编写 ExampleXxx 示例代码不仅是完善文档的必经之路，更是一门绝佳的“活文档”艺术。</p>
<p>通过在 “&#95;test.go” 文件中编写以 Example 开头的函数，并在末尾加上 // Output: 注释，Go 官方的 go doc 和 pkgsite 就能在网页上直接渲染出可交互、可直接在浏览器中运行（Playable）的示例代码。</p>
<p>然而，在这个看似优雅的设计背后，却隐藏着一个让全球 Go 工程师如鲠在喉、折磨了大家近十年的<strong>“硬伤”</strong>：<strong>Go 官方对 Example 函数的签名有着极其死板的限制——它必须是无参、无返回值的空函数。</strong></p>
<p>为了这个限制，我们在写文档示例时，不得不写出大量极度违背 Go 地道（Idiomatic）编程哲学的样板代码。</p>
<p>为了彻底拔掉这根刺，Go 编译器团队核心成员Damien Neil (neild)提交了一项被称为“大一统”的提案——<strong>Issue #79808：允许 Example 示例支持任意函数签名！</strong></p>
<p>这项提案不仅终结了社区自 2017 年以来的长期争论（#21111 与 #64993），更用一种极其巧妙且务实的“解耦设计”，为 Go 语言的文档生态减负。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-testing-journey-qr.png" alt="" /></p>
<h2>历史的疮疤：为了写好一个示例，我们被迫说了多少“废话”？</h2>
<p>在真实的 Go 工程中，几乎所有的文件读写、网络调用都会返回 error。按照 Go 的地道写法，当我们调用一个可能失败的函数时，最自然的反应是直接将错误向上抛出：</p>
<pre><code class="go">// 我们真正希望在文档里向用户展示的地道写法
func ExampleReadFile() error {
    data, err := os.ReadFile("config.json")
    if err != nil {
        return err // 优雅直接
    }
    fmt.Println(string(data))
    return nil
}
</code></pre>
<p><strong>但是，在目前的 Go 版本中，这行不通！</strong> 因为 Example 函数不允许有任何返回值。</p>
<p>为了写出一个能通过 go test 验证的示例，你被迫在你的示例代码中写满各种“废话”：</p>
<pre><code class="go">// 迫于规则，我们不得不写出的妥协版本
func ExampleReadFile() {
    data, err := os.ReadFile("config.json")
    if err != nil {
        log.Fatal(err) // 或者使用更难看的 panic(err)
    }
    fmt.Println(string(data))
    // Output: { "port": 8080 }
}
</code></pre>
<p>这带来了一个极其糟糕的引导效应：<strong>新手在阅读官方文档时，会误以为在业务代码中遇到错误就应该直接 log.Fatal 或 panic。</strong> 示例代码不仅没能展示出 Go 语言优雅的错误处理哲学，反而成了不良编码习惯的传染源。</p>
<p>此外，当你在编写测试框架（Test Framework）或者使用 Go 新版<a href="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIyNzM0MDk0Mg==&amp;action=getalbum&amp;album_id=4017357519222882315#wechat_redirect">引入的 synctest 虚拟时钟技术</a>时，你必须拿到底层的 *testing.T 对象。但由于 Example 函数不能有入参，你根本无法写出一个可以传递 t *testing.T 对象的示例代码。</p>
<h2>十年博弈：从 #21111 到 #64993 的宿命碰撞</h2>
<p>为了解决这两个痛点，Go 社区实际上进行了两场旷日持久的战役：</p>
<h3>战役 1：允许 Example 返回 error（#21111 &#8211; 始于 2017 年）</h3>
<p>早在 2017 年，大牛 rogpeppe 就提出了这个想法。但当时官方为了等待 Go 2 的整体错误处理方案（Error Handling Draft）而将其无限期搁置。随着 <a href="https://tonybai.com/2025/06/04/error-syntax">Go 错误语法提案被无限期延迟</a>，这个 hold 也终于在近年被拿掉。</p>
<h3>战役 2：允许入参带上 *testing.T（#64993 &#8211; 始于 2024 年）</h3>
<p>随着多智能体测试和 synctest（需要虚拟时间同步）等现代测试技术的发展，开发者越来越需要展示涉及 testing.T / testing.B / testing.F 的完整用例。但因为不支持入参，大家不得不写出复杂的 Stub（伪造类）去强行拼凑。</p>
<h2>大一统方案 #79808：允许任意函数签名的 Example！</h2>
<p>面对这两个互相纠缠、细节极其复杂的提案，Go 核心团队的 neild 指出，之前的讨论之所以陷入死胡同，是因为大家把 <strong>“文档如何展示示例（Rendering）”</strong> 与 <strong>“测试框架如何运行示例（Execution）”</strong> 混为一谈了。</p>
<p>如果我们彻底将这两者解耦呢？</p>
<p>在 <strong>Issue #79808</strong> 中，他提出了一个近乎完美的极简方案：<strong>对 Example 函数的签名彻底放开限制。</strong></p>
<h3>1. 规则大解放</h3>
<p>只要你的函数命名符合 Example 或 ExampleXxx（且首字母大写），go doc 和 pkgsite 就会一律无条件地将其作为示例代码在网页上展示出来！</p>
<p>无论你的函数长成什么样：</p>
<pre><code class="go">package example_test

// 场景 A：优雅返回 error，不再需要 log.Fatal
func Example_returning_an_error() error {
    f, err := os.Open("testfile")
    if err != nil {
        return err
    }
    defer f.Close()
    return nil
}

// 场景 B：支持传入 testing.T，测试框架类的完美示范
func ExampleFunc_taking_a_t(t *testing.T) {
    if err := examplepackage.Func(t); err != nil {
        t.Fatal(err)
    }
}

// 场景 C：甚至可以带上输入输出参数
func Example_in_and_out(a, b int) string {
  return examplepackage.AddReturningString(a, b)
}
</code></pre>
<h3>2. 完美的运行防线</h3>
<p>如果放开了签名限制，go test 怎么运行它们？</p>
<ul>
<li><strong>对于有参数或返回值的 Example</strong>：testing 包<strong>一律不自动运行它们</strong>。这极大地简化了测试运行器的复杂度，避免了处理带有复杂入参的函数执行。</li>
<li><strong>防止混淆</strong>：如果一个 Example 带有入参或返回值，但你却在末尾写了 // Output: 注释，go test 会直接抛出编译期错误，防止开发者产生误解。</li>
<li><strong>如何跑测试？</strong>：如果你依然希望在测试中运行这些复杂的示例，非常简单，写一个伴随的 Test&#8230; 函数手动调用它即可：</li>
</ul>
<pre><code class="go">func TestExample_returning_an_error(t *testing.T) {
  if err := Example_returning_an_error(); err != nil {
    t.Fatal(err)
  }
}
</code></pre>
<h2>小结：让代码回归纯粹</h2>
<p>从这个跨越十年的提案博弈中，我们能清晰地感受到 Go 团队的实用主义工程哲学：</p>
<p>他们没有为了解决问题而去创造一套复杂的、充满各种边界特例的编译器黑魔法，而是通过<strong>“将文档展示与执行引擎完全剥离”</strong>这一解耦思路，在不增加运行时负担的前提下，完美解决了长期折磨开发者的体验难题。</p>
<p>让文档回归原本纯粹的模样，让代码不再为古板的规则而妥协。这也是 Go 语言吸引系统工程师的魅力所在。</p>
<p>资料链接：</p>
<ul>
<li>https://github.com/golang/go/issues/21111</li>
<li>https://github.com/golang/go/issues/64993</li>
<li>https://github.com/golang/go/issues/79808</li>
</ul>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2026年，大厂重构核心系统为何集体投向 Go？</title>
		<link>https://tonybai.com/2026/06/08/the-real-reason-big-tech-is-switching-to-go/</link>
		<comments>https://tonybai.com/2026/06/08/the-real-reason-big-tech-is-switching-to-go/#comments</comments>
		<pubDate>Mon, 08 Jun 2026 00:06:41 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[思考控]]></category>
		<category><![CDATA[AgentHarness]]></category>
		<category><![CDATA[AI独角兽]]></category>
		<category><![CDATA[Channel]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[goroutine]]></category>
		<category><![CDATA[I/O密集型]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[reddit]]></category>
		<category><![CDATA[ShadowTesting]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[uber]]></category>
		<category><![CDATA[协程]]></category>
		<category><![CDATA[单体架构]]></category>
		<category><![CDATA[后端开发]]></category>
		<category><![CDATA[垃圾回收]]></category>
		<category><![CDATA[垃圾回收机制]]></category>
		<category><![CDATA[大厂]]></category>
		<category><![CDATA[工作流自动化]]></category>
		<category><![CDATA[工程维护性]]></category>
		<category><![CDATA[开发效率]]></category>
		<category><![CDATA[影子测试]]></category>
		<category><![CDATA[微服务]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[技术选型]]></category>
		<category><![CDATA[算力成本]]></category>
		<category><![CDATA[系统解耦]]></category>
		<category><![CDATA[编译器移植]]></category>
		<category><![CDATA[软件重构]]></category>
		<category><![CDATA[通道]]></category>
		<category><![CDATA[高并发]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6423</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/06/08/the-real-reason-big-tech-is-switching-to-go 大家好，我是Tony Bai。 在软件工程中，核心技术栈的迁移是一项高风险、高成本的决策。 然而，在近期的技术演进中，我们看到了一股明显的趋势：全球科技巨头与快速成长的 AI 独角兽们，正在不约而同地将核心系统向 Go 语言（Golang）收敛。 微软宣布将 TypeScript 核心编译器移植到 Go，构建速度暴涨 10 倍。 Reddit将庞大的 Python 单体架构逐步解耦，核心数据模型全面改用 Go 重写。 Lovable（前沿 AI 独角兽）将 4.2 万行 Python 代码移植为 Go，服务器实例直接从 200 个锐减到 10 个。 Uber作为长期拥有最庞大 Go 代码库的企业之一，持续将后端服务从 Python、Node.js 收敛、统一至 Go 语言，以极低的算力成本承载海量并发。 这并非盲目的技术跟风，而是一场基于运行成本、高并发能力和工程维护性的理性重构。今天，我们就通过这些大厂的真实工程案例，深入拆解大厂重构核心系统时，集体投向 Go 的底层逻辑与技术启示。 微软的编译器移植：为什么 C# 之父不选 C# 和 Rust？ 2025 年 3 月，微软宣布将 TypeScript [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/the-real-reason-big-tech-is-switching-to-go-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/08/the-real-reason-big-tech-is-switching-to-go">本文永久链接</a> &#8211; https://tonybai.com/2026/06/08/the-real-reason-big-tech-is-switching-to-go</p>
<p>大家好，我是Tony Bai。</p>
<p>在软件工程中，核心技术栈的迁移是一项高风险、高成本的决策。</p>
<p>然而，在近期的技术演进中，我们看到了一股明显的趋势：全球科技巨头与快速成长的 AI 独角兽们，正在不约而同地将核心系统向 Go 语言（Golang）收敛。</p>
<ul>
<li><strong>微软</strong>宣布<a href="https://tonybai.com/2026/01/27/typescript-compiler-go-rewrite-10x-speed-microsoft-details">将 TypeScript 核心编译器移植到 Go</a>，构建速度暴涨 10 倍。</li>
<li><strong>Reddit</strong>将庞大的 Python 单体架构逐步解耦，核心数据模型全面改用 Go 重写。</li>
<li><strong>Lovable</strong>（前沿 AI 独角兽）将 4.2 万行 Python 代码移植为 Go，服务器实例直接从 200 个锐减到 10 个。</li>
<li><strong>Uber</strong>作为长期拥有最庞大 Go 代码库的企业之一，持续将后端服务从 Python、Node.js 收敛、统一至 Go 语言，以极低的算力成本承载海量并发。</li>
</ul>
<p>这并非盲目的技术跟风，而是一场基于<strong>运行成本、高并发能力和工程维护性</strong>的理性重构。今天，我们就通过这些大厂的真实工程案例，深入拆解大厂重构核心系统时，集体投向 Go 的底层逻辑与技术启示。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/go-network-programming-complete-guide-pr.png" alt="" /></p>
<h2>微软的编译器移植：为什么 C# 之父不选 C# 和 Rust？</h2>
<p>2025 年 3 月，微软宣布将 TypeScript 的编译器和工具链移植到 Go 语言。到了 2026 年 4 月，采用 Go 编译器底层的 <strong>TypeScript 7 Beta</strong> 正式发布。</p>
<p>令人瞩目的是，这个项目的操盘手正是 <strong>Anders Hejlsberg</strong> —— <strong>C# 语言的设计者</strong>与 <strong>TypeScript 的创造者</strong>。</p>
<p>这一决策在技术社区引发了深度探讨：为什么微软不用自家的 C#，也没有选择<a href="https://tonybai.com/2026/05/12/the-embarrassing-truth-about-rust-adoption-in-china">近年来大热的 Rust？</a>这背后隐藏着极具启发性的工程权衡。</p>
<h3>明确“移植（Port）”与“重写（Rewrite）”的边界</h3>
<p>在工程决策中，这两者有着本质区别：</p>
<ul>
<li><strong>完全重写（Rewrite）</strong>：意味着抛弃旧代码，从零开始重新设计（New Design），风险极高。</li>
<li><strong>代码移植（Port）</strong>：翻译现有代码，保持原有的代码结构和行为（Same behavior &amp; structure），风险可控。</li>
</ul>
<p>旧的 TypeScript 编译器是用函数式风格编写的，且重度依赖<strong>垃圾回收（GC）</strong>。</p>
<ul>
<li><strong>为什么不选 C#</strong>？C# 是典型的面向对象（OOP）语言。如果使用 C#，将很难平滑移植函数式风格的旧编译器，几乎等同于要推倒重写。</li>
<li><strong>为什么不用 Rust</strong>？Rust 没有垃圾回收机制，要求开发者手动且极其严苛地管理内存。如果改用 Rust，团队必须彻底推翻并重新设计整套代码的内存生命周期，这直接背离了“平滑移植”的初衷。</li>
</ul>
<h3>Go 为什么是最佳折中方案？</h3>
<p>Go 既支持原生编译，拥有极高的运行速度，同时还内置了高效的垃圾回收（GC）。</p>
<p>更关键的是，<strong>习惯写法的 Go 代码（Idiomatic Go）在结构上与 TypeScript 原有的编码模式有着天然的相似性</strong>。这使得原有团队在维护移植后的 Go 代码时，几乎没有认知摩擦。</p>
<blockquote>
<p><strong>移植后的性能收益：</strong><br />
  *   编译构建速度直接<strong>提升了 10 倍</strong>。<br />
  *   编辑器加载时间从原来的 <strong>9.5 秒缩短至 1.2 秒</strong>。</p>
<p>微软用事实证明：Go 是在维持原有代码结构的前提下，实现性能跨越式提升的最短路径。</p>
</blockquote>
<h2>Reddit 的解耦之路：高并发压力下的“影子测试”</h2>
<p>Reddit 曾长期使用 Python 单体（Monolith）架构。随着全球流量的爆发，单体架构的弊端逐渐显现：代码耦合严重、可靠性降低，系统维护成本极高。在高峰期，甚至连发帖、评论等基础操作都会遭遇严重的延迟。</p>
<p>为了解决高并发瓶颈，Reddit 决定对核心的四大基础特性（评论、账户、帖子、子社区）进行解耦，全部用 Go 语言重写为独立的微服务。</p>
<h3>为什么选择 Go？</h3>
<p>在高并发场景下，Go 内置的轻量级协程（Goroutine）和通道（Channel）调度模型，相比于 Python 的多线程/多进程，能够以更低的系统开销和更少的网络协调，抗住同等规模的流量。</p>
<h3>零故障上线的“影子测试（Shadow Testing）”</h3>
<p>系统重构最忌讳“一刀切”式的直接上线。Reddit 采用了一套精妙的过渡方案：</p>
<p>他们让 <strong>Python 旧单体</strong>与 <strong>Go 新服务</strong>在后台同时运行。对于每一次写入请求，两个系统都会收到相同的输入。Go 服务将数据写入一个隔离的测试数据库。</p>
<pre><code class="text">               ┌───────────────┐
               │  User Input   │
               └───────┬───────┘
                       │
             ┌─────────┴─────────┐
             ▼                   ▼
    ┌─────────────────┐ ┌─────────────────┐
    │ Python Monolith │ │   Go Services   │
    └────────┬────────┘ └────────┬────────┘
             ▼                   ▼
    ┌─────────────────┐ ┌─────────────────┐
    │  Production DB  │ │     Test DB     │
    └─────────────────┘ └─────────────────┘
             │                   │
             └─────────┬─────────┘
                       ▼
             Compare &amp; Debug Output
</code></pre>
<p>通过在后台持续对比两个系统的输出结果，团队在不影响真实用户的前提下，排查并修复了新服务中的所有潜在 Bug。确认无误后，才 100% 将流量平滑切换到了 Go 服务。</p>
<blockquote>
<p><strong>重构后的收益：</strong><br />
  *   关键写入操作的 <strong>P99 延迟直接砍半</strong>，系统高可用性大幅提升。</p>
</blockquote>
<h2>运行成本与算力优化：Lovable 与 Uber 的工程实践</h2>
<p>对于快速成长的 AI 独角兽 <strong>Lovable</strong> 来说，技术栈的选择直接关系到服务器账单和业务存亡。</p>
<p>作为一个允许非技术用户通过 AI 构建应用的平台，Lovable 在核心链路上面临着极高并发的挑战。用户发送一条聊天指令，后台需要<strong>瞬间触发超过 50 个 HTTP 并发调用</strong>，分别去请求各大模型提供商、内部存储及周边服务。</p>
<p>Python 在这种高度并行的 IO 密集型场景下显得力不心。Lovable 团队果断将 <strong>4.2 万行 Python 代码重写为 Go</strong>。</p>
<p>无独有偶，<strong>Uber</strong> 作为长期拥有最庞大 Go 代码库的企业之一，也曾经历过从 Python、Node.js 向 Go 逐步收敛的过程。为了在单机上压榨出更高的并发能力，减少冗余的服务器开销，Uber 逐步在后端服务中停用了 Python，将核心服务统一收敛至 Go。</p>
<p>这两家公司，用 Go 实现了令人惊叹的算力优化：</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/the-real-reason-big-tech-is-switching-to-go-2.png" alt="" /></p>
<h2>小结：大厂系统重构释放的工程信号</h2>
<p>这些大厂和独角兽们的集体实践，为我们释放了清晰的工程信号：</p>
<ol>
<li><strong>“运行成本”正成为系统重构的首要驱动力</strong><br />
在项目初期，动态语言（如 Python、TypeScript）确实能提供极佳的开发爽感。但当业务规模扩大、高并发场景增加时，其带来的服务器硬件成本和维护开销将呈指数级上升。</li>
<li><strong>Go 处于“开发效率”与“运行性能”的黄金分割点</strong><br />
它不像 Rust 那样有着极其陡峭的内存管理和所有权学习曲线，能够让团队保持极高的开发效率；同时，它又拥有接近原生代码的执行速度，和冠绝群雄的轻量级并发模型。这使其成为了现代生产级后端服务的首选。</li>
</ol>
<p>大厂的重构实践，为我们提炼了以下三条黄金工程铁律：</p>
<ol>
<li><strong>分清“移植”与“重写”</strong>：在系统重构时，若想在保留原有业务逻辑的前提下快速提升性能，像微软那样进行代码级移植（Port）是风险最低、效率最高的路径。</li>
<li><strong>善用“影子测试（Shadow Testing）”</strong>：核心系统解耦和替换时，切忌盲目上线。采用双轨并行、对比输出的影子测试，是保障系统平滑过渡、零故障上线的最佳实践。</li>
<li><strong>高并发场景首选轻量并发模型</strong>：当系统面临大量并发 IO（如 AI 编排、多 API 协同调用）时，Go 语言的协程机制能够以极低的资源消耗提供极佳的吞吐量。</li>
</ol>
<p>系统重构的本质，是在业务发展、团队认知和机器成本之间寻找最优解。而 Go，正是大厂在经历数次工程实践后，给出的最务实的答案。</p>
<p>资料链接：https://www.youtube.com/watch?v=-Z813pHqSFI</p>
<hr />
<p><strong>今日开放讨论：</strong></p>
<ol>
<li><strong>微软不用 C# 也不用 Rust，而是选择 Go 来移植 TS 编译器，这个决策中的“移植 vs 重写”权衡是否启发了你？</strong></li>
<li><strong>Reddit 采用的“双轨制影子测试”非常稳健，你在实际的系统迁移或重构中，使用过类似的测试方案吗？</strong></li>
<li><strong>从 Lovable 将 200 个实例缩减为 10 个，到 Uber 节省 97% 的算力，这些真实的性能与成本数据是否改变了你对后端技术选型的看法？</strong></li>
</ol>
<p>欢迎在评论区留下你的硬核观点，我们一起探讨系统重构与 Go 的工程之美！</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/08/the-real-reason-big-tech-is-switching-to-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“辛辛苦苦考上985，却发现AI能替代我90%的工作”：今天的高考，我们还在为什么而战？</title>
		<link>https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless/</link>
		<comments>https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless/#comments</comments>
		<pubDate>Sun, 07 Jun 2026 00:08:35 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[985]]></category>
		<category><![CDATA[AIAgent]]></category>
		<category><![CDATA[ArtificialIntelligence]]></category>
		<category><![CDATA[AutomatedWorkflow]]></category>
		<category><![CDATA[CognitiveUpgrade]]></category>
		<category><![CDATA[CriticalThinking]]></category>
		<category><![CDATA[DeepLearning]]></category>
		<category><![CDATA[DegreeDevaluation]]></category>
		<category><![CDATA[Gaokao]]></category>
		<category><![CDATA[HigherEducation]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[SelfIteration]]></category>
		<category><![CDATA[SkillDegradation]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[TestOrientedEducation]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[全自动工作流]]></category>
		<category><![CDATA[大模型]]></category>
		<category><![CDATA[学历贬值]]></category>
		<category><![CDATA[应试教育]]></category>
		<category><![CDATA[批判性思维]]></category>
		<category><![CDATA[技能退化]]></category>
		<category><![CDATA[深度学习]]></category>
		<category><![CDATA[自我迭代]]></category>
		<category><![CDATA[认知升级]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[高等教育]]></category>
		<category><![CDATA[高考]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6419</guid>
		<description><![CDATA[本文永久链接 &#8211; 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可以在极短时间内完成可视化输出。 &#8230; &#8230; 反思一下：这些被替代的工作，其核心特征不就是“做题”吗？ 给出一个明确的需求（题目），寻找最优的算法或方案（标准答案）。 高考，是一场关于“寻找标准答案”的终极训练；而我们的大学，在过去很长一段时间里，只是这场训练的延续。 当“做题”的能力被AI彻底平替，我们十二年寒窗苦读积累的优势，在这一瞬间被抹平了。 2026年的质问：今天的高考，我们还在为什么而战？ 既然如此，我们为什么还要支持孩子去考场？高考在今天，究竟还有什么意义？ 如果我们依然把高考当成“通往高薪工作的自动售票机”，那我们一定会失望。因为那台售票机，已经坏了。 但如果我们换一个视角，高考在2026年，依然是一场不可替代的“成人礼”。我们今天在高考中战斗，是为了拿回三样AI永远无法夺走的东西： 1. 战的是“深度专注与抗挫折的底层神经元” 高考不仅考查知识，更是一场对意志力、抗压能力、多任务管理和长期深度专注力的极限训练。 在碎片化信息和即时反馈（如短视频、快餐娱乐）毁掉一代人脑前额叶的时代，能够为了一个长远目标，日复一日地进行深度学习、克服枯燥和焦虑——这种“深度专注的神经机制”，是你未来驾驭AI、不被AI深度娱乐化奴役的唯一底层硬件。 2. 战的是“在无标准答案世界里，寻找最优解的勇气” 很多人抱怨高考僵化，但高考恰恰教给普通人一件事：在规则极其明确的系统里，如何通过自我迭代，把自己的能力逼出极限。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless">本文永久链接</a> &#8211; https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless</p>
<p>大家好，我是Tony Bai。</p>
<p>今天，2026年6月7日，千万名考生再次走向战场。</p>
<p>考场外，红色的横幅依然高悬，旗袍与鲜花依然簇拥。但在喧嚣之下，空气中却弥漫着一种前所未有的复杂情绪。</p>
<p>数据已经给出了最直观的反馈：在经历了2024年1342万人的历史峰值后，2025年和2026年的高考报名人数连续两年出现下滑。2026年全国高考报名人数仅为1290万人，比2025年的1335万人还减少45万人</p>
<p>生源的两连降，折射出的是无数家庭最深层的理性觉醒。在这个2026年的夏天，生成式AI、智能Agent和全自动工作流已经深度嵌入社会的每一个齿轮。</p>
<p>前阵子，一位本科毕业于某顶尖985高校、刚刚工作两年的程序员在社交平台上发帖：</p>
<blockquote>
<p>“当年高考，我是全省前0.5%的做题家。辛辛苦苦在985卷了四年，以为拿到了中产阶级的入场券。结果工作不到两年，公司引入了AI 研发工作流。我现在每天90%的工作——写基础代码、debug、甚至写技术文档，AI两秒钟就能做得比我更好、更无懈可击。我开始怀疑，我那十二年的寒窗苦读，到底算什么？”</p>
</blockquote>
<p>这条帖子瞬间引爆了全网的共鸣与焦虑。</p>
<p>今天的高考，我们还在为什么而战？如果连最顶尖的985、211学历，在AI面前都显得如此脆弱，我们付出的巨大代价，究竟在交换什么？</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless-4.png" alt="" /></p>
<h2>斯坦福的残酷研究：为什么我们的大学无法对抗AI的清算？</h2>
<p>要回答“今天的高考还在为什么而战”，我们必须先看清一个长期被我们忽视的真相：<strong>我们的高等教育，正在让最聪明的年轻人“停止成长”。</strong></p>
<p>斯坦福大学联合北京大学、清华大学、俄罗斯高等经济学院等全球顶尖机构，在《Nature Human Behaviour》（自然-人类行为）上发表了<a href="https://www.researchgate.net/publication/349707487_Skill_levels_and_gains_in_university_STEM_education_in_China_India_Russia_and_the_United_States">一篇具有里程碑意义的长期追踪研究</a>。</p>
<p>研究团队对中国、美国、印度、俄罗斯数万名计算机和电子工程专业的学生进行了长达四年的标准化测试，得出了两个极具颠覆性的结论：</p>
<h3>入学时，中国高考生是无可争议的“世界霸主”</h3>
<p>在18岁踏入大学校门的那一天，中国大一新生的学术能力和数理基础处于全球同龄人的金字塔尖，其批判性思维（Critical Thinking）能力也与美国同龄人完全持平。</p>
<p>这证明，我们高强度的高考选拔，确实筛选出了这个星球上最聪明、最能吃苦、逻辑最严密的一批年轻人。</p>
<h3>毕业时，我们的学生经历了残酷的“技能退化”</h3>
<p>然而，追踪到大四毕业时，情况发生了戏剧性的逆转。</p>
<p>在大学四年里，美国学生的批判性思维能力实现了大幅度增长（约0.5个标准差）。而<strong>中国、印度和俄罗斯的学生，在四年里批判性思维几乎“零增长”，甚至在后两年出现了绝对值上的显著下降。</strong></p>
<p>在数学和物理等专业学术能力上，<strong>中国学生在大一结束后，也出现了明显的、绝对的技能损失（下降约0.3标准差）。</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless-2.png" alt="" /></p>
<p>这篇《Nature》论文揭示了一个近乎残酷的事实：<strong>中国的高考生在18岁那年达到了认知和技能的巅峰，然后，在大学四年里，他们被“严进宽出”的淘汰机制、陈旧的专业划分、以及重灌输轻思辨的教学模式，温水煮青蛙般地削弱了。</strong></p>
<p>当这群大四毕业生拿着“高起点、低增值”的认知系统，一头撞上2026年已经进化到能够自我迭代的AI系统时，悲剧就发生了。</p>
<p>那些在大学里靠死记硬背应付考试拿下的GPA，在AI面前，连一秒钟的抵抗力都没有。</p>
<h2>AI时代的清算：被替代的90%，到底是什么？</h2>
<p>为什么那位985毕业生会感叹“AI替代了我90%的工作”？</p>
<p>因为在2026年的今天，AI首先消灭的，恰恰是那些<strong>“有明确标准、有套路可循、依赖信息检索和加工”</strong>的白领工作。</p>
<p>而这些工作，正是过去的大学教育最擅长培养、也是中产家庭最向往的就业方向：</p>
<ul>
<li><strong>初级程序员</strong>：AI自动编程工具已经能完成大部分基础代码的编写与测试。</li>
<li><strong>翻译与文案策划</strong>：多模态大模型能够瞬间生成符合各种文化语境的译文和营销方案。</li>
<li><strong>基础数据分析师</strong>：复杂的报表统计、趋势预测，AI可以在极短时间内完成可视化输出。</li>
<li>&#8230; &#8230;</li>
</ul>
<p>反思一下：<strong>这些被替代的工作，其核心特征不就是“做题”吗？</strong></p>
<p>给出一个明确的需求（题目），寻找最优的算法或方案（标准答案）。</p>
<p>高考，是一场关于“寻找标准答案”的终极训练；而我们的大学，在过去很长一段时间里，只是这场训练的延续。</p>
<p>当“做题”的能力被AI彻底平替，我们十二年寒窗苦读积累的优势，在这一瞬间被抹平了。</p>
<h2>2026年的质问：今天的高考，我们还在为什么而战？</h2>
<p>既然如此，我们为什么还要支持孩子去考场？高考在今天，究竟还有什么意义？</p>
<p>如果我们依然把高考当成“通往高薪工作的自动售票机”，那我们一定会失望。<strong>因为那台售票机，已经坏了。</strong></p>
<p>但如果我们换一个视角，高考在2026年，依然是一场不可替代的<strong>“成人礼”</strong>。我们今天在高考中战斗，是为了拿回三样AI永远无法夺走的东西：</p>
<h3>1. 战的是“深度专注与抗挫折的底层神经元”</h3>
<p>高考不仅考查知识，更是一场对意志力、抗压能力、多任务管理和长期深度专注力的极限训练。</p>
<p>在碎片化信息和即时反馈（如短视频、快餐娱乐）毁掉一代人脑前额叶的时代，能够为了一个长远目标，日复一日地进行深度学习、克服枯燥和焦虑——<strong>这种“深度专注的神经机制”，是你未来驾驭AI、不被AI深度娱乐化奴役的唯一底层硬件。</strong></p>
<h3>2. 战的是“在无标准答案世界里，寻找最优解的勇气”</h3>
<p>很多人抱怨高考僵化，但高考恰恰教给普通人一件事：在规则极其明确的系统里，如何通过自我迭代，把自己的能力逼出极限。</p>
<p>这种“在给定约束条件下，调动一切资源求得最优解”的肌肉记忆，在走出考场后，可以无缝迁移到任何一个充满未知、没有标准答案的领域。</p>
<h3>3. 战的是“改写自身命运的入场券”</h3>
<p>尽管学历在贬值，但不可否认，高考依然是这个社会最公平、杂质最少的一次阶层跃迁和朋友圈重组的机会。</p>
<p>你考上的名校，它所能给你的最大价值，已经不再是课堂上的专业知识（那些网上都有），而是<strong>和你并肩站在一起的、同样经历过极限训练的同龄人群体，以及这个平台带给你的眼界和高维认知。</strong></p>
<h2>自救路径：考完之后，如何重塑你的“免裁系统”？</h2>
<p>明天之后，高考生们将迎来人生中最长的一个暑假。但请记住，真正的分水岭，从交卷的那一刻才刚刚开始。</p>
<p>如果你不想在四年后成为那个被AI替代90%的“失业做题家”，你必须在大学第一天起，按照以下三步路径，重新设计自己的成长曲线：</p>
<h3>步骤一：从“答题者”转变为“提问者”</h3>
<p>未来的价值，不取决于你脑子里记了多少标准答案，而取决于你能否向AI、向世界提出最具洞察力的问题。在大学里，多去问“为什么（Why）”和“如果……会怎样（What if）”，而不是仅仅去背诵“是什么（What）”。</p>
<h3>步骤二：建立你的“AI-Native”个人工作流</h3>
<p>不要把AI当成作弊工具，而要把自己当成一个“AI团队的PM（项目经理）”。去学习如何编写结构化的Prompt，如何用多款AI工具协同完成一个研究报告、一个独立网站或一个创意视频。<strong>未来的竞争，不是人与AI的竞争，而是“掌握了AI的人”与“没掌握AI的人”的竞争。</strong></p>
<h3>步骤三：死守“人性的护城河”</h3>
<p>去体验真实的生活，去和不同背景的人深度交流，去大自然中感受风、光与温度。去阅读那些不考的经典著作，去思考没有标准答案的伦理与道德。</p>
<p><strong>人类特有的同理心、直觉、审美、物理世界的交互能力，以及在迷茫中坚守信仰的感性，是AI在很长一段时间里无法跨越的终极护城河。</strong></p>
<h2>小结</h2>
<p>后天，当千万名考生走出考场，迎接他们的将是一个与他们父母辈完全不同的世界。</p>
<p>这个世界充满了不确定性，甚至有些冰冷。</p>
<p>但请不要害怕。高考从未保证过我们一生的无忧，它只是给了我们一次证明自己可以“为了梦想竭尽全力”的机会。</p>
<p>今天的高考，我们不为那张逐渐贬值的文凭而战，我们为那个<strong>在重压下历经淬炼、拥有无限自驱力、随时准备重塑自我</strong>的自己而战。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless-3.png" alt="" /></p>
<p>祝所有2026届考生，考场得意，金榜题名；更祝你们，在人生的下一场AI风暴中，乘风破浪。</p>
<p>资料链接：https://www.researchgate.net/publication/349707487_Skill_levels_and_gains_in_university_STEM_education_in_China_India_Russia_and_the_United_States</p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>传奇黑客 Geohot 炮轰 AI Agent：这是软件工程史上代价最昂贵的灾难！</title>
		<link>https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster/</link>
		<comments>https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster/#comments</comments>
		<pubDate>Fri, 05 Jun 2026 23:39:53 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AIAgents]]></category>
		<category><![CDATA[AISlop]]></category>
		<category><![CDATA[AI垃圾代码]]></category>
		<category><![CDATA[AI智能体]]></category>
		<category><![CDATA[AutomatedDeployment]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[CodeGeneration]]></category>
		<category><![CDATA[CodeMaintenance]]></category>
		<category><![CDATA[CodeOutput]]></category>
		<category><![CDATA[CodeQuality]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[CognitiveLoad]]></category>
		<category><![CDATA[EternalSloptember]]></category>
		<category><![CDATA[FirstPrinciples]]></category>
		<category><![CDATA[Geohot]]></category>
		<category><![CDATA[GeorgeHotz]]></category>
		<category><![CDATA[Hallucination]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[SystemsThinking]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[TechnicalDebt]]></category>
		<category><![CDATA[代码产出]]></category>
		<category><![CDATA[代码审查]]></category>
		<category><![CDATA[代码生成]]></category>
		<category><![CDATA[代码维护]]></category>
		<category><![CDATA[代码质量]]></category>
		<category><![CDATA[幻觉]]></category>
		<category><![CDATA[技术债]]></category>
		<category><![CDATA[永恒垃圾九月]]></category>
		<category><![CDATA[测试驱动开发]]></category>
		<category><![CDATA[第一性原理]]></category>
		<category><![CDATA[系统思维]]></category>
		<category><![CDATA[自动化]]></category>
		<category><![CDATA[自动部署]]></category>
		<category><![CDATA[认知负担]]></category>
		<category><![CDATA[软件工程]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6415</guid>
		<description><![CDATA[本文永久链接 &#8211; 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。新手的涌入再也没有停止过，原有社区的精致文化被彻底、永久地稀释了。从那以后，老网民将这个悲剧称为“永恒九月”。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/geohot-slams-ai-agents-as-the-most-expensive-software-disaster-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster">本文永久链接</a> &#8211; https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster</p>
<p>大家好，我是Tony Bai。</p>
<p>在 AI 辅助编程疯狂席卷全球的今天，几乎每个开发者的双眼都被“效率翻倍”、“一键生成应用”的狂热口号晃得睁不开眼。大厂管理层在积极推进“全员 AI 编码”，创业者在吹嘘“氛围编码（Vibe Coding）”。</p>
<p>然而，就在这个全民狂欢的时刻，科技界最著名的叛逆天才、传奇黑客 <strong>George Hotz（网名 Geohot）</strong> 站了出来。他曾在 17 岁时成为全球首位解锁 iPhone 的人，随后又单枪匹马破解了 PS3，并创办了自动驾驶独角兽 Comma.ai。</p>
<p>最近，Geohot 在他的个人博客上发表了一篇名为《<a href="https://geohot.github.io/blog/jekyll/update/2026/05/24/the-eternal-sloptember.html">The Eternal Sloptember（永恒的垃圾九月）</a>》的文章。在这篇文章里，他用极其冰冷且辛辣的笔触写道：</p>
<blockquote>
<p><strong>“我在这里立个 flag：在软件开发中引入 AI Agent，将是行业历史上代价最昂贵的错误之一。因为 Agent 根本不会写程序，而人们需要花越来越长的时间才能意识到这一点。”</strong></p>
</blockquote>
<p>这篇文章迅速引爆了开发者社区。在 Reddit 的 <code>r/webdev</code> 板块上，该话题斩获了数千个高赞，引发了无数一线架构师和开发者的强烈共鸣。</p>
<p>为什么这位顶级黑客会把 AI Agent 视为软件工程的毒瘤？他口中的“永恒垃圾九月”究竟隐藏着怎样可怕的行业真相？</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<h2>典故溯源：什么是“永恒的垃圾九月”？</h2>
<p>要理解 Geohot 的愤怒，我们首先需要理解他借用的一个历史梗——<strong>“永恒九月（Eternal September）”</strong>。</p>
<p>在互联网早期的 Usenet 时代，每年九月，都会有大批大学新生接入网络。这群新手由于不懂网络礼仪（Netiquette），会短暂地破坏原有技术社区的纯粹与优雅。但过去，老用户们只需花费一个月时间，就能将这些新生“同化”。</p>
<p>直到 1993 年 9 月，美国在线（AOL）向其数百万普通用户全面开放了 Usenet。新手的涌入再也没有停止过，原有社区的精致文化被彻底、永久地稀释了。从那以后，老网民将这个悲剧称为“永恒九月”。</p>
<p>Geohot 认为，<strong>现在的软件工程正在经历一场由 AI Agent 带来的“永恒垃圾九月（The Eternal Sloptember）”</strong>：</p>
<p>大模型（LLM）本质上是“高度复杂的统计模型，旨在模仿人类编程的分布”。它们吐出来的代码，在语法和格式上看起来天衣无缝，但<strong>在底层逻辑和系统架构上，往往是坏的、错的。最致命的是，这种“错”被包装得越来越隐蔽，越来越难以被察觉。</strong></p>
<p>无数根本不具备底层系统思维的“调参手”，正在用 AI 疯狂向世界的开源社区和企业代码库里倾倒垃圾代码（Slop）。</p>
<h2>“老虎机”效应：Geohot 历时半年的亲身实验</h2>
<p>和那些只会纸上谈兵的评论家不同，Geohot 亲自用 AI 进行了长达 6 个月的深度开发实验。</p>
<p>他尝试用 AI Agent 编写他的深度学习框架 <code>tinygrad</code> 的部分代码，甚至尝试用 AI 逆向工程一块 USB 到 PCIe 的芯片。</p>
<p>他的实验结论可以用两个词来概括：<strong>极其失望</strong>。</p>
<p>“AI 确实非常擅长快速搭建一个原型（Prototype），”Geohot 承认。但当你试图去打磨它、消灭最后 5% 的边缘 Bug、让其达到工业级标准时，<strong>AI 就会变成一台“老虎机（Slot Machine）”：</strong></p>
<pre><code>[输入 Prompt] ───&gt; 摇下老虎机摇杆 ───&gt; [输出 buggy 代码 A]
                                             │ (发现错误，重新 Prompt)
                                             ▼
[输入修正 Prompt] ───&gt; 再次摇下摇杆 ───&gt; [输出稍微不同的 buggy 代码 B]
</code></pre>
<p>你一次次地拉下摇杆（修改 Prompt），AI 一次次给你吐出看似不同、实则依然带有微妙缺陷的代码。<strong>你感觉自己只差临门一脚，但你永远无法真正跨过那条代表“完美交付”的终点线。</strong></p>
<p>“这种试错和盲目摸索（类似Ralph loop），比我自己从第一性原理出发去手写，要慢得多。”Geohot 坦言，“这完全达不到我工作过的任何一家公司的基本技术门槛。”</p>
<p>相比之下，他发现一个古老的自动漏洞挖掘工具 <strong>AFL（American Fuzzy Lop，模糊测试工具）</strong> 找出的代码漏洞都比大模型多。因为 AFL 是纯粹确定性的，它没有人类社交焦虑，更没有被 AI 公司的“心理战（Psyops）”所污染。</p>
<h2>大厂病灶：为什么非技术管理层会成为“垃圾代码”的帮凶？</h2>
<p>既然 AI Agent 开发如此低效，为什么现在各大巨头依然在疯狂推进？</p>
<p>Geohot 揭示了企业管理层一个极其荒谬的逻辑漏洞：<strong>对“虚假指标”的崇拜。</strong></p>
<p>在大型企业中，管理层通常是非技术出身的。他们无法辨别代码的高级设计与品味，他们只能看懂看得见的指标——比如“开发进度图表”和“代码产出行数（Lines of Code, LOC）”。</p>
<p>“那些底层的、平庸的开发者（Bottom Performers），通过使用 AI，突然产出了 10 倍的代码量。”</p>
<p>管理层看到图表后大喜过望：“看啊！我们的团队多有效率！这个星期我们提交了 100 个 PR！”</p>
<p><strong>但他们不知道，这多出来的 10 倍代码，全部都是无法维护的“工业垃圾（Slop）”。</strong></p>
<p>这造成了极度扭曲的恶性循环：</p>
<ol>
<li>底层开发者用 AI 疯狂复制粘贴，提交海量垃圾 PR。</li>
<li>由于大企业的反馈循环极慢、极官僚，这些黑盒垃圾代码顺利混入主干分支。</li>
<li><strong>认知负担转嫁</strong>：高水平的资深工程师（Top Performers）不得不花费双倍、甚至十倍的精力和认知负载（Cognitive Load），去帮这些 AI 审查代码擦屁股、Debug。</li>
</ol>
<p>这就是为什么 Geohot 说：<strong>“AI Agent 对大企业的伤害，远比对个人或小团队的伤害要深得多。”</strong></p>
<h2>终局梦醒：当黑盒代码的“账单”到期</h2>
<p>Reddit <code>r/webdev</code> 板块上的大批大厂老兵，用自己身边的真实惨剧，印证了 Geohot 的预言。</p>
<p>一位在 Fortune 100 强企业工作的开发者留言道：</p>
<p>他们的管理层在大会上狂热地宣称“AI 将接管一切开发，以后周五下午直接让 AI 部署 1 万行代码上线”。</p>
<p>“我们这些一线的工程师在下面默默看着。<strong>等这波 AI 狂热退去，账单到期，面对一堆无人能懂的‘黑盒代码（Black Boxes）’在半夜 3 点崩溃时，这些管理层会迎来极其残酷的梦醒时刻。</strong>”</p>
<p>目前的微服务和企业级软件，本就已经因为复杂的业务需求和拼凑的库而变得极其脆弱。一旦你引入 AI，让它用“在 StackOverflow 上抄来的、似是而非的代码”去填补这些系统的空隙，你实际上是在制造一个<strong>“无法被任何人理解、也无法被任何人重构”的终极怪胎</strong>。</p>
<p>“没有经验的 junior 开发者加上 AI，就是一场灾难的配方。” 另一位老兵写道。</p>
<h2>幸存者法则：别在“AI 妄想症”中自残</h2>
<p>面对这场由大厂和 AI 巨头联手制造的“AI 妄想症（AI Psychosis）”，真正的工程师该如何自救？</p>
<p>Geohot 在文章的结尾，给出了一个极具力量、甚至带有一丝英雄主义的生存守则：</p>
<p><strong>“这个时代真正的故事，将是谁能在这场‘AI 妄想症’中保持清醒，不伤害到自己。”</strong></p>
<ol>
<li><strong>回归第一性原理（First-Principles）</strong>：放弃用 AI 盲目试错。当你遇到技术难题时，去读书，去查阅最干净、最硬核的一手的底层文档，搞清楚 CPU、内存和操作系统的底层运行机制。</li>
<li><strong>把 AI 降级为助手，而不是总监</strong>：Geohot 并不排斥 AI，但他对 AI 的定位极其清晰——它是一个更聪明的谷歌搜索，是一个帮你写样板代码、帮你写测试基准（Benchmarks）的高效秘书。<strong>但系统的架构设计、核心逻辑和最终决策，必须牢牢握在你自己的手里。</strong></li>
<li><strong>拒绝成为平庸的羊群</strong>：当周围的人都在用 AI 批量生产垃圾代码并为此沾沾自喜时，保持克制，坚持对完美、优雅和高性能的代码品味的追求。</li>
</ol>
<p>技术世界正在迎来一场由大量平庸代码构成的泥石流。但泥石流终会退去，那些在风暴中死守底层常识、拒绝交出思考方向盘的真正工程师，将在废墟之上，重建这个世界的数字基石。</p>
<p>资料链接：</p>
<ul>
<li>https://www.reddit.com/r/webdev/comments/1tvsfgj/im_calling_it_now_the_adoption_of_ai_agents_into/</li>
<li>https://geohot.github.io/blog/jekyll/update/2026/05/24/the-eternal-sloptember.html</li>
</ul>
<hr />
<p><strong>今日开放讨论：</strong></p>
<p>你同意 Geohot 关于“AI 降低了代码质量，最终会拖垮大企业系统”的悲观论调吗？在你的团队里，是否也出现了“LOC（代码行数）增加，但系统却变得越来越像黑盒”的苗头？</p>
<p>欢迎在评论区分享你的一线工程经历，我们一起在这个狂热的时代保持冷峻的思考！</p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>别把 Go 写成 Java：毁掉项目从过度架构开始</title>
		<link>https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting/</link>
		<comments>https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting/#comments</comments>
		<pubDate>Fri, 05 Jun 2026 00:21:42 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[BoilerplateCode]]></category>
		<category><![CDATA[CleanArchitecture]]></category>
		<category><![CDATA[CodeReadability]]></category>
		<category><![CDATA[CodeStandards]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Decoupling]]></category>
		<category><![CDATA[DependencyInjection]]></category>
		<category><![CDATA[DependencyInversion]]></category>
		<category><![CDATA[DomainBoundaries]]></category>
		<category><![CDATA[DomainDrivenDesign]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[internal]]></category>
		<category><![CDATA[KISSPrinciple]]></category>
		<category><![CDATA[KISS原则]]></category>
		<category><![CDATA[ModularMonolith]]></category>
		<category><![CDATA[Overengineering]]></category>
		<category><![CDATA[PackageStructure]]></category>
		<category><![CDATA[pkg]]></category>
		<category><![CDATA[SingleModule]]></category>
		<category><![CDATA[业务边界]]></category>
		<category><![CDATA[代码可读性]]></category>
		<category><![CDATA[代码规范]]></category>
		<category><![CDATA[依赖倒置]]></category>
		<category><![CDATA[依赖注入]]></category>
		<category><![CDATA[包结构]]></category>
		<category><![CDATA[单一模块]]></category>
		<category><![CDATA[整洁架构]]></category>
		<category><![CDATA[样板代码]]></category>
		<category><![CDATA[模块化单体]]></category>
		<category><![CDATA[解耦]]></category>
		<category><![CDATA[过度设计]]></category>
		<category><![CDATA[领域驱动设计]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6411</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting 大家好，我是Tony Bai。 前不久，Go 语言社区 Reddit (r/golang) 上爆发了两场激烈的争论。 这两个帖子的主题直击了无数 Go 开发者的灵魂深处： 我们该如何构建一个大型的 Go 模块化单体架构，而不被复杂的“架构设计”淹没？ 为什么现在的 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 与被滥用的 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/stop-writing-go-like-java-avoid-over-architecting-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting">本文永久链接</a> &#8211; https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting</p>
<p>大家好，我是Tony Bai。</p>
<p>前不久，Go 语言社区 Reddit (r/golang) 上爆发了两场激烈的争论。</p>
<p>这两个帖子的主题直击了无数 Go 开发者的灵魂深处：</p>
<ol>
<li>我们该如何构建一个大型的 Go 模块化单体架构，而不被复杂的“架构设计”淹没？</li>
<li>为什么现在的 Go 项目里，pkg 和 internal 目录被滥用得如此令人发指？</li>
</ol>
<p>如果你正在维护一个中大型的 Go 后端项目，你大概率经历过这样的绝望时刻：为了加一个极其简单的业务字段，你需要穿透 handler、usecase、domain、repository、adapter 等足足五层抽象结构；你的项目根目录下躺着一个 pkg 文件夹，里面又套着 internal，代码藏在七八级目录深处。</p>
<p><strong>你以为你在写出业界最高标准的“整洁架构（Clean Architecture）”，但实际上，你正在把 Go 语言写成你曾经最讨厌的“臃肿企业级 Java”。</strong></p>
<p>今天，我们就来透过这层过度工程（Over-engineering）的外衣，看看顶级开发者们是如何打破这种“架构伪神话”，用最符合 Go 哲学的极简方式，构建起能支撑千万级流量的大型单体项目的。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/the-ultimate-guide-to-go-module-qr.png" alt="" /></p>
<h2>被“标准规范”毒害的洋葱病</h2>
<p>在一个全新的 Go 项目立项时，很多技术负责人的第一反应就是去 GitHub 搜一个叫做 golang-standards/project-layout 的高赞仓库，然后照猫画虎地建起一堆目录。</p>
<p>紧接着，悲剧就开始了。综合 Reddit 各位资深大佬的吐血经验，以下两大陷阱，几乎踩中了 90% 的业务团队：</p>
<h3>陷阱 1：“死去的” pkg 与被滥用的 internal</h3>
<p>帖子原作者一针见血地指出：<strong>pkg 目录是时代的眼泪，而 internal 正在遭受前所未有的滥用。</strong></p>
<p>在早期的 GOPATH 时代，我们需要一个地方来区分业务代码和第三方包，于是有了 pkg。但在 Go Modules 已经全面普及的今天，你的代码仓库根目录本身就是一个 Module。<strong>在 root 下面再嵌套一层 pkg 纯粹是“脱裤子放屁”——它除了让你的 import 路径变长 4 个字符之外，没有任何实际意义。</strong></p>
<p>更致命的是 internal。官方引入 internal 是为了防止库开发者暴露内部 API 给第三方。但是现在的业务开发团队，为了所谓的“代码隔离”，盲目地把整个 App 的所有核心逻辑全塞进 internal，导致项目结构变成了这样：</p>
<pre><code>internal/app/modules/order/usecase/impl/order.go
</code></pre>
<p>当你接手这种代码时，你每天有 30% 的时间在 VSCode 里狂按文件树，试图搞清楚自己到底在哪。</p>
<h3>陷阱 2：生搬硬套的 DDD 与洋葱架构（Clean Architecture）</h3>
<p>一位在电商公司写 Go 的老哥抱怨道：他试图用严格的 DDD（领域驱动设计）和六边形架构来组织他的模块化单体代码。结果是，随着项目增大，维持这种“整洁”变成了噩梦。</p>
<p>每一次新增功能，都要处理无休止的接口绑定（Wiring dependencies）、防止循环引用，以及为了“解耦”而写的大量毫无意义的样板代码（Boilerplate）。<strong>“我感觉自己花在维护架构上的时间，甚至超过了实际交付业务功能的时间。”</strong></p>
<p>记住：Go 语言的灵魂是简单直接。强行引入 Java/C# 语境下的沉重分层，就像给一辆轻巧的保时捷跑车装上了坦克的履带。</p>
<h2>为什么“扁平化”才是 Go 架构的尽头？</h2>
<p>面对这种极度臃肿的代码，我们在 Reddit 的评论区看到了海外老炮们的共识：<strong>Opting for a flatter structure typically guides you organically away from overly nested internal. (选择更扁平的结构，通常能自然而然地引导你远离过度嵌套的代码气味)。</strong></p>
<p>在 Go 语言中，优秀的架构并不是靠“目录分层”来体现的，而是靠“领域边界（Domain Boundaries）”和“依赖流向”来体现的。</p>
<h3>真相 1：Package 的划分应该基于“业务能力”，而不是“技术层次”</h3>
<p>把项目按 controllers/、services/、models/ 划分是典型的反模式（MVC遗毒）。这种结构下，如果你要修改一个关于“订单”的功能，你必须在好几个目录下反复横跳。</p>
<p>真正懂 Go 的做法是：<strong>按领域（Domain）划分子包。</strong> 一个 order 包里，就应该包含订单的结构体、订单的仓储接口、乃至相关的处理逻辑。所有的东西都在一起，高内聚。</p>
<h3>真相 2：不需要过度设计“防腐层”，直到你真正觉得痛</h3>
<p>一些高级开发者指出，他们宁愿花更多的时间去做“事件风暴（EventStorming）”和领域建模，也不愿意去写抽象接口。如果你的 order_repository.go 从第一天起就只有一个 Postgres 实现，且未来三年都不会换数据库，那么你为了“解耦”而提取的一个洋葱接口层，就是纯粹的成本浪费。</p>
<h2>大型 Go 项目实用构建指南</h2>
<p>抛开那些玄乎其玄的词汇，如果你想构建一个不崩溃的、好维护的大型模块化单体（Modular Monolith），请立刻遵循以下四条“少即是多”的务实法则：</p>
<h3>法则 1：干掉 pkg，克制使用 internal</h3>
<p>除非你正在写一个准备开源给全世界使用的公共 Library 包，否则你的微服务或单体 Web 应用根本不需要 pkg 目录。</p>
<p>同样，把你的核心代码从深渊般的 internal/app/core/&#8230; 中解放出来。把业务包直接平铺在根目录或者按大模块放在一个外层目录即可。<strong>让文件树尽可能的“浅”。</strong></p>
<h3>法则 2：采用极简的领域扁平结构（Domain-Driven Flattening）</h3>
<p>正如评论区大佬给出的终极解法，你的项目结构应该看起来像这样：</p>
<pre><code class="go">cmd/
  server/main.go        // 所有依赖注入和组装都在这里完成（Composition Root）
domain/                 // 或者直接放在根目录
  order/
    order.go            // 领域模型（Entity/Aggregate）
    repository.go       // 接口（依赖倒置，只定义 order 需要什么）
    postgres_repo.go    // 直接在同一个包下实现，或者平铺
  user/
    ...
  catalog/
    ...
</code></pre>
<p>不要再建什么 port 和 adapter 文件夹了！order.go 就是你的核心，postgres_repo.go 就是它的具体实现。它们呆在一个包里，简单明了，任何人 grep 搜索一下就能秒懂。</p>
<h3>法则 3：让 Consumer 定义接口（Interface Segregation）</h3>
<p>很多人为了解耦，喜欢在一个单独的 interface 包里定义全局接口，这又是 Java 思维作祟。</p>
<p>在 Go 里，接口应该是“隐式实现”的。<strong>不要在提供者（Provider）端定义接口，要在消费者（Consumer）端定义。</strong></p>
<p>比如 order 包需要发邮件，它不应该去依赖 email 包的接口。它应该在自己的包里定义一个极小的 type Mailer interface { Send(&#8230;) }，然后在 main.go 中把真正的 Email 服务注入进去。这就是 Go 解除循环依赖的最强法宝。</p>
<h3>法则 4：一切脏活累活，全扔进 main.go</h3>
<p>对于单体应用来说，不要试图在每个模块内部做复杂的自动依赖注入（Autowiring）或自启动钩子。</p>
<p>保持每个模块都是极度干净、被动的。然后在你唯一的 cmd/server/main.go 里，显式地初始化数据库、初始化各个模块、然后手动把它们组装（Wire）在一起。是的，这个 main.go 可能会有几百行甚至上千行，但它让你在启动时一目了然，排查问题再也不用像个无头苍蝇一样在迷宫里乱撞了。</p>
<h2>小结：回归大道至简</h2>
<p>不管是摒弃 pkg，还是剥离 500 层的“整洁架构”，这背后体现的其实是 Go 语言最深刻的哲学：<strong>Pragmatism（务实主义）。</strong></p>
<p>技术架构的终极目标，是为了让人读得懂，让业务跑得快，而不是为了满足程序员在代码里“建构精密钟表”的虚荣心。</p>
<p>如果你的代码不能让人在 30 秒内找到修改点，不能让你通过一个简单的 grep 搜索就锁定业务逻辑，那么不管你的架构图画得多么符合六边形、洋葱或者 DDD 规范，它都是一个失败的设计。</p>
<p><strong>所以，立刻打开你的 IDE，试着把你那些嵌套了五六层的文件夹拖出来吧。相信我，当你删掉那一堆废话般的中间层接口时，你会感受到前所未有的舒畅。</strong></p>
<p>资料链接：</p>
<ul>
<li>https://www.reddit.com/r/golang/comments/1tftqpj/how_do_you_structure_and_maintain_large_go/</li>
<li>https://www.reddit.com/r/golang/comments/1tft8ds/pkg_internal_directories_are_way_overused/</li>
</ul>
<hr />
<p><strong>今日互动探讨：</strong></p>
<p>在你的 Go 项目里，曾经为了遵循所谓的“规范设计”做过哪些现在看起来极其离谱的过度工程？你现在的项目是扁平结构还是洋葱结构？</p>
<p><strong>欢迎在评论区留言晒出你的代码结构，或者 @出那个每天沉迷于建文件夹的同事。让我们一起探讨，什么是真正的“Go 语言地道之美”！</strong></p>
<p><em>(如果你觉得这篇实操指南帮到了你，请不要吝啬你的点赞和转发！)</em></p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>开源维护者的困境</title>
		<link>https://tonybai.com/2026/06/04/the-maintainers-dilemma/</link>
		<comments>https://tonybai.com/2026/06/04/the-maintainers-dilemma/#comments</comments>
		<pubDate>Thu, 04 Jun 2026 00:10:24 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AIAgent]]></category>
		<category><![CDATA[AIProgramming]]></category>
		<category><![CDATA[AI编程]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[CodeContribution]]></category>
		<category><![CDATA[CodeQuality]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[CollaborationModel]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[MaintainerDilemma]]></category>
		<category><![CDATA[OpenSourceMaintainer]]></category>
		<category><![CDATA[ProtectedBranches]]></category>
		<category><![CDATA[PullRequest]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[RussCox]]></category>
		<category><![CDATA[SteveFrancia]]></category>
		<category><![CDATA[SupplyChainSecurity]]></category>
		<category><![CDATA[TechnicalDebt]]></category>
		<category><![CDATA[TrustContract]]></category>
		<category><![CDATA[workflow]]></category>
		<category><![CDATA[代码审查]]></category>
		<category><![CDATA[代码贡献]]></category>
		<category><![CDATA[代码质量]]></category>
		<category><![CDATA[供应链安全]]></category>
		<category><![CDATA[信任契约]]></category>
		<category><![CDATA[协作模式]]></category>
		<category><![CDATA[受保护分支]]></category>
		<category><![CDATA[工作流]]></category>
		<category><![CDATA[开源维护者]]></category>
		<category><![CDATA[技术债]]></category>
		<category><![CDATA[拉取请求]]></category>
		<category><![CDATA[维护困境]]></category>
		<category><![CDATA[自动化]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6407</guid>
		<description><![CDATA[本文永久链接 &#8211; 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 或 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/the-maintainers-dilemma-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/04/the-maintainers-dilemma">本文永久链接</a> &#8211; https://tonybai.com/2026/06/04/the-maintainers-dilemma</p>
<p>大家好，我是Tony Bai。</p>
<p>开源软件的繁荣建立在一种隐形的“社会契约”之上：贡献者贡献智慧，维护者投入精力审核。然而，当维护者面对成百上千个待处理的拉取请求（PR）而精疲力竭时，这个契约正滑向崩塌。</p>
<p>AI 的介入似乎提供了一线生机，但也带来了一个灵魂拷问：如果代码是 AI 写的，审核也是 AI 做的，那么“受保护的分支”究竟是在保护什么？开源社区赖以生存的“人与人的连接”是否会随之消失？前Go 语言核心团队成员、gohugo和Cobra 创始人 Steve Francia 近期<a href="https://spf13.com/p/the-maintainers-dilemma/">撰写了一篇文章</a>，深度剖析了这一“维护者的困境”。</p>
<p>本文便是这篇文章的中译文。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<hr />
<p>受保护的分支（protected branch）需要第二个人在代码发布前进行审核。这条规则的存在是因为人类会犯错，而第二双眼睛可以捕捉到第一双眼睛遗漏的东西。但如果其中一个审核者是机器人呢？如果两个都是呢？</p>
<p>目前，我可以要求 AI 在我的仓库里发起一个拉取请求（PR），然后由我自己合并它。或者我可以自己写代码，让 AI 来审核。在这两种情况下，分支在技术上都是“受保护的”。但这种保护现在究竟意味着什么？</p>
<p>这些问题值得思考。但它们往往占据了太多的注意力，而一个更迫切的问题却无人问津：现在，在我的各个仓库中，都有来自那些花时间理解代码库、编写测试并提交简洁补丁的人们的未处理拉取请求。我还没审核它们。遗憾的是，讽刺的是，我没审核是因为我深深地在乎。我知道花时间在一个项目上发起 PR 是多么大的事，对于那些我作为志愿者维护的项目更是如此。对于每一个拥有受资助维护者的开源项目，都有数以百万计的未付报酬的人类正盯着日益增长的待办事项，思考着这个周末是该花在处理问题上，还是直接合上电脑出门去。</p>
<p>AI 工具现在可以进行可靠的代码审查、编写补丁和分拣问题。问题不再是它们是否足够好到有用。真正的问题在于，“有用”在何处变成了“负担”，以及过度依赖我们无法轻易重建的东西——维护者与贡献者之间、通过经验积累的判断力，以及围绕这种交流形成的社区——是否会造成破坏。</p>
<h2>118 个待处理的拉取请求</h2>
<p>我上周查看了 GitHub 通知，然后直接关闭了标签页。<a href="https://github.com/spf13/cobra">Cobra</a> 有 243 个未解决的问题（issues）和 118 个待处理的拉取请求（PR）。<a href="https://github.com/spf13/afero">Afero</a> 有 114 个问题和 55 个 PR。这两个项目都是我创建的。</p>
<p>尽管我没有及时行动，但这些都是活跃维护的项目。Cobra 支持着 kubectl、GitHub CLI、hugo 以及成千上万的其他工具。当你输入 kubectl get pods 或 gh pr list 时，Cobra 正在解析你的命令。Afero 存在于 Hugo 内部，也存在于 Cobra 自身，以及数以百计的其他项目中。对 Cobra 的一次草率合并可能会破坏 Kubernetes 的工具链。对 Afero 的一次错误审核可能会开启一个静默传播到下游所有环节的文件系统漏洞。</p>
<p>我创建 Cobra 是因为我需要为 Hugo 提供特定的 CLI 用户体验，而当时没有现成的库可以支持。我将它拆分为一个独立项目，想着其他人可能会觉得有用。我从未想过十年后我还在维护它，也没想到这两个项目会成为这么多人的关键基础设施。我只是想做些有用的东西，也许能交几个朋友。但开源意味着我有义务无限期地维护它吗？随着我发布的每个新项目，维护旧项目的时间就越来越少。有些 PR 已经等了三年了。在 Afero 的 BasePathFs 中有一个已报告的安全漏洞，自从 2025 年 6 月起就挂在那里——直到写这篇文章之前，我都还没意识到它在那里，因为积压工作太惊人了。</p>
<p>维护的数学逻辑行不通。这是一个众所周知的开源问题（<a href="https://xkcd.com/2347/">相关 XKCD 漫画</a>）。贡献的数量增长速度远超维护者的数量，且随着项目的复杂性和影响力的增加，审查每个 PR 所需的时间也在增长。有些项目能吸引志愿者维护者，但这又带来了新问题：没有人对全局负责，每个人都只挑选对自己重要的事情，剩下的就随它去。Cobra 故意设计得节奏缓慢——有太多的项目依赖它，不能草率合并任何内容——因此每次更改都需要更彻底的审查，而不是更少。我的许多其他项目则掉进了既被维护又被遗弃的灰色地带。我会将其描述为针对最关键路径优化的维护，但这种区别对八个月前提交了修复方案且从未得到回音的人来说，意义并不大。</p>
<p>这不仅仅是我的问题。GitHub 托管着超过 4.2 亿个仓库。我有幸成为 <a href="https://ossf.org/">Secure Open Source Fund</a> 首批资助对象的一员——这是一项真正产生了影响的投资。但即使在经过几个周期的扩展后，它也只覆盖了约 200 个项目。<a href="https://openssf.org/">OpenSSF</a> 每周扫描数百万个关键项目。<a href="https://tidelift.com/">Tidelift</a> 向维护者支付报酬。把这些加起来，你也只覆盖了成千上万个项目。这虽然很有意义，但与实际的表面积相比只是杯水车薪。</p>
<p><a href="https://www.synopsys.com/blogs/software-integrity/open-source-software-analysis.html">百分之九十六的代码库包含开源组件</a>，而它们赖以生存的基础是由盯着永远清不空的待办事项的人类维持的，他们思考着是否这就是他们最终耗尽精力或干脆停止查看的周末。随之而来的还有维护者的愧疚感——明知道人们指望着你的工作，而你却没有能力帮忙，但又无法撒手不管。</p>
<h2>进入机器人时代</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2026/the-maintainers-dilemma-2.png" alt="" /></p>
<p>我一直在几个仓库里尝试 AI 工具——比如在 <a href="https://github.com/spf13/fileflow">fileflow</a> 上的 Jules 和在 <a href="https://github.com/spf13/pathologize">pathologize</a> 上的 AI 尝试，这些仓库依赖较少，有更多尝试空间。我也一直在 Afero 上运行 GitHub Copilot，它有更多依赖，但其模块化架构允许我扩展新后端而不触及其他项目依赖的关键路径。</p>
<p>我去了一次邮轮旅行。当我在海上时，Jules 还在继续工作，每天都会发起新的 PR，因为我还没来得及合并第一个。等我回到家时，这两个项目已经有了超过 120 个 PR。我抽出一个早晨来审核它们，却发现它们其实代表了大约五个不同的更改集，每个更改集都在几周内每天提交一次。PR 本身并没有错，Jules 确实发现了真实的问题。但没有一个 PR 是完全正确的；在合并之前，每个都需要修正。在 Jules 提供的指导下，我做了调整，总体方向显示出前景。但实验目前带来的维护工作量是增加了，而不是减少了：我必须核实这 120 个 PR 中每一个是否真的是重复的，然后才能关闭。本意是减少积压工作的工具，反而增加了积压。</p>
<p>Jules 发起的这些 PR 署名是我，而不是 Jules——这引发了关于归属和责任的问题。从仓库的角度看，我是这些更改的作者。但我一行代码都没写。如果其中一个补丁引入了 Bug 或漏洞，提交历史记录指向的是我。大多数贡献者政策在编写时并未考虑到这种情况，标准的 CLA（贡献者许可协议）也不区分人类编写的代码和人类指导 AI 编写的代码。</p>
<p>目前看来，Jules 似乎没有关于其之前工作的记忆，也没有检查未处理 PR 的能力。它扫描仓库，发现问题，发起 PR，然后停止。如果你不合并，Jules 下次扫描时会发现同样的问题并再次发起 PR。它没法知道你已经意识到了问题但还没合并，原因可能是：你不同意这个修复，或者修复优先级较低，或者你正在船上度假且两周内没法上网。这种语境对工具来说是不可见的。Jules 发现了一个真实的漏洞——文件操作中的 TOCTOU（检查时间到使用时间）漏洞——它是对的，它指出了这一点……指出了 12 次。</p>
<p>对于机械性的工作——标记问题、更新依赖、起草样板回复——这些工具确实非常有用。但 Jules 和 Copilot 无法告诉我，这 55 个 Afero 的 PR 中，是否有一个根本不属于这个项目。这种判断需要了解代码库的过去和未来，而不仅仅是它的现状。</p>
<p>这些工具只能基于可见的事物工作：代码、未解决的问题、PR 历史。维护者的约束条件是那些没人写下来的东西：内部辩论如何塑造了 API。人类判断力最无可替代、AI 最盲目的鸿沟，就在这两者之间。</p>
<p>曾和我一起在 Go 团队工作的 Russ Cox 在最近的一次<a href="https://groups.google.com/g/golang-dev/c/80p9v99999M">关于 AI 贡献的讨论</a>中说得很好：“人们吹嘘代码库有成百上千行，是由 AI 在创纪录的时间内完成并提交的。仔细观察会发现，这些代码库往往更像是跳舞的大象，而不是有用的工程产物。”</p>
<p>他是对的。但我一直在思考代码之外的事情。编写新软件和维护现有软件是有区别的。更新依赖并不是跳舞的大象。分拣一个陈旧的问题并不是创造性行为。告诉一个贡献者“谢谢，但我们不接受对这个 API 的更改”只是在维持运营。而现在，对于数百万个项目来说，灯已经熄灭了。</p>
<p>这还不是最大的挑战。大多数人没意识到的是，评估和合并更改比编写新代码要难得多。理解一个更改如何融入现有的代码库、它的历史以及它的计划，需要一部分隐形的知识——这些知识存在于创意工作中，需要某种目前没有模型能复制的判断力。</p>
<h2>“受保护”到底保护了什么</h2>
<p>Go 项目对我来说真的很美——那是运行了 15 年、极其细致的评审、设计讨论和精炼的评审文化。那是理想状态。但 Go 是个例外，大多数项目无法企及：由 Google 资助的全职贡献者，一项旨在持续 50 年且不受外部截止日期压力的任务。</p>
<p>Go 团队最近有一个长长的讨论，<a href="https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship">关于是否接受 AI 生成的贡献</a>——Russ Cox 的名言也源自那个讨论。这些人我共事多年——同样的评审、同样的方案、在同样的白板前争论。阅读那个论坛线程，我能听到他们的声音。我能看到他们每个人是如何坚持自己认为正确的事情，以及为什么。</p>
<p>Rob Pike 第一个发言且毫不含糊。这是一条非常危险的道路。在你的第一步上要小心。我建议简单地说“不”。那是 Rob。直接、原则性强，且通常是正确的。然后 Alan Donovan 指出了不舒服的现实：“我怀疑我们今天收到的一大部分 CL（更改列表）已经包含了 LLM 生成的代码，无论作者是否承认。马已经跑出马厩了。”</p>
<p>Russ Cox 写下了我见过的最深思熟虑的回应。他的核心观点是：“我们能做的最重要的事情是维持我们平时的代码评审和代码质量标准……当代码的部分或全部是在 AI 工具的帮助下编写时，同样的标准必须适用。”以及：“当你使用 AI 工具完成工作时，你的责任并不会减轻。”</p>
<p>这些立场中的每一个都是合理的。每一个都基于一个假设，而这个假设揭示了困境的核心：他们假设<strong>有人类可以进行评审</strong>。</p>
<p>Go 能负担得起“维持同样的标准”，因为它有全职贡献者。它能负担得起“直接说不”，因为 Go 有足够多的人对重要的事情说“是”。</p>
<p>Afero 没有。大多数开源项目没有。当 Rob Pike 说“不”时，Go 项目保持运行。当我说“不”时，PR 就挂在那里。那是不同种类的“不”。</p>
<p>这里有一个光谱，你落在哪里取决于你究竟在两者之间如何权衡。在实践中，维护者面临五个选项：</p>
<ol>
<li>人类编写，人类审核。</li>
<li>AI 编写，人类审核。</li>
<li>人类编写，AI 审核。</li>
<li>AI 编写，AI 审核，人类点击合并。</li>
<li>AI 编写，AI 审核，AI 点击合并。</li>
</ol>
<p>列表中的每一步通常都是在用严谨性换取速度，用信任换取吞吐量。但对于大多数人类或 AI 都不评审的 PR，根本谈不上标准。</p>
<h2>我们真正保护的是什么</h2>
<p>当维护者评审贡献者的 PR 时，存在一个潜规则（契约）。贡献者投入数小时理解代码库、编写测试并提交干净的内容。评审者投入数小时进行评估、打回并提出改进建议。双方都在学习。评审者理解了项目的一个新角落。贡献者学会了更好地使用代码库的惯用法。这种关系形式。这种交流是使开源成为一个社区，而不仅仅是供应链的重要原因。</p>
<p>Bryan Cantrill 在 Oxide 描述了这种关于 LLM 使用的<a href="https://oxide.computer/blog/on-the-use-of-llms">内部政策</a>：通常，“读者和作者都默认，是编写者付出了更大的智力劳动。”当内容是 AI 生成时，“这个社会契约就变成了作者付出的努力最少。如果双方都没有付出努力，那么评审还有什么意义？”Oxide 的答案是，无论如何人类都要负责；工具不吸收责任。这是正确的直觉。但它假设有人真正在那里承担责任。</p>
<p>对于大多数项目，根本没有人在评审。社会契约不是被 AI 破坏的——它正被沉默破坏。六个月前提交了一个干净、测试完备的补丁却从未收到回音的贡献者，并没有体验到一个退化版的理想契约。他们什么也没体验到。</p>
<p>一个不完美的社会契约，是否好过一个从未发生的完美契约？</p>
<p><strong>来自 AI 的在一天内的响应，可能比来自人类的永远的沉默更受尊重。</strong></p>
<h2>前方的实验</h2>
<p>我决定弄清楚到底怎么回事。我在 Afero 上看到了 55 个尚未处理的 PR 请求，显然，这种拖延态度本身就已经构成了一种忽视行为。</p>
<p>AI 工具会让我更投入，让我从那些本不需要我的决策中解脱出来吗？还是会让我感觉连接更少——人类元素又减少了一层？我不知道让 AI 评审 PR 而不是人类评审是什么感觉，也不知道当双方的努力都减弱时，问责制是否还存在。这就是实验。</p>
<p>Russ 在那个讨论中还说了另一句话，我一直在回味：“最重要的事情是保持思考。工具让关掉大脑变得非常容易，但如果你小心避开那个陷阱，你就能产出好的成果。”这就是我要尝试走的路。让 AI 处理大量数据吧。而我自己则要继续负责做出正确的判断。</p>
<p>没有一个通用的政策可以同时适用于 Go 和 Afero。也不应该有。</p>
<p>受保护的分支依然受保护。我只是不再确定那究竟意味着什么。</p>
<p>你遇到过这种情况吗？我特别想听听那些尝试过使用人工智能进行代码审查的维护人员的意见——哪些方面运作正常，哪些又出现了问题。</p>
<p>原文地址：https://spf13.com/p/the-maintainers-dilemma/</p>
<hr />
<p><strong>今日互动探讨</strong></p>
<p>“如果一个 AI 能够修复你项目中困扰已久的 Bug，但由于它是 AI 生成的，没有人能完全解释其每一步的逻辑，你会选择合并它吗？”</p>
<p>在开源社区的未来，我们究竟是在守护代码的质量，还是在守护人类参与的痕迹？欢迎在评论区分享你的看法。</p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/04/the-maintainers-dilemma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AI 时代如何真正掌握一门新技术？这份非主流学习指南建议永久收藏</title>
		<link>https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide/</link>
		<comments>https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide/#comments</comments>
		<pubDate>Thu, 04 Jun 2026 00:08:24 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Agent]]></category>
		<category><![CDATA[AgenticEngineering]]></category>
		<category><![CDATA[AIEra]]></category>
		<category><![CDATA[AI时代]]></category>
		<category><![CDATA[ArtificialIntelligence]]></category>
		<category><![CDATA[ClaudeCode]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[ContinuousLearning]]></category>
		<category><![CDATA[Cursor]]></category>
		<category><![CDATA[DeepLearning]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[MentalModels]]></category>
		<category><![CDATA[MuscleMemory]]></category>
		<category><![CDATA[ProgrammingParadigm]]></category>
		<category><![CDATA[PromptEngineering]]></category>
		<category><![CDATA[SocraticMethod]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[SystemsThinking]]></category>
		<category><![CDATA[TechBarrier]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[代码审查]]></category>
		<category><![CDATA[大模型]]></category>
		<category><![CDATA[技术壁垒]]></category>
		<category><![CDATA[持续学习]]></category>
		<category><![CDATA[提示词工程]]></category>
		<category><![CDATA[智能体]]></category>
		<category><![CDATA[深度学习]]></category>
		<category><![CDATA[系统思维]]></category>
		<category><![CDATA[编程范式]]></category>
		<category><![CDATA[肌肉记忆]]></category>
		<category><![CDATA[苏格拉底提问法]]></category>
		<category><![CDATA[认知模型]]></category>
		<category><![CDATA[软件工程]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6402</guid>
		<description><![CDATA[本文永久链接 &#8211; 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代写的代价：你以为你开挂了，其实你只是把自己的大脑外包了。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/master-new-tech-in-ai-era-counter-intuitive-learning-guide-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide">本文永久链接</a> &#8211; https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide</p>
<p>大家好，我是Tony Bai。</p>
<p>最近，在开发者社区 Reddit 的 Golang（Go语言）板块上，<a href="https://www.reddit.com/r/golang/comments/1tsxbd4/how_do_you_guys_actually_learn_stuff_in_this_ai/">一个求助帖</a>引发了跨越语言和技术栈的集体共鸣。</p>
<p>发帖人是一位刚入行两年的新人，他的帖子大意是：</p>
<blockquote>
<p><em>“我很迷茫。在这个AI时代，大家似乎都在用大模型疯狂地构建项目、飞速向前。如果我按照传统方式，看书、查文档、一行行敲代码，就会觉得自己慢得像个古董，正在被时代抛弃。</em></p>
<p><em>但当我向AI要答案时，我又觉得我根本不是在编程，我只是个在中间倒腾提示词的传话筒。看着那些跑起来的代码，我感到无比空虚——我感觉自己像个骗子，我根本没有真正掌握它。在AI时代，我到底该怎么学习？”</em></p>
</blockquote>
<p>这个帖子之所以能得到成百条回复，是因为它戳破了当下几乎所有技术学习者的隐秘焦虑：<strong>当AI 能秒出代码、秒给方案时，我们该如何建立属于自己的、不可替代的技术壁垒？</strong></p>
<p>如果你的学习方式依然停留在“遇到问题 -> 丢给AI -> 复制粘贴 -> 跑通收工”的循环中，那么你正在主动将自己推向被AI淘汰的边缘。</p>
<p>在这篇文章中，我们将结合这场技术社区的讨论，为你拆解一套在AI时代真正掌握一门新技术（我们以崇尚极简的Go语言为例）的“非主流”学习指南。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/go-tui-primer-qr.png" alt="" /></p>
<h2>为什么“AI代写”是一粒甜美的毒药？</h2>
<p>在Reddit的讨论区中，一位资深开发者留下了这样一句警示：</p>
<blockquote>
<p><strong>“Remember, lines produced are lines spent; not achieved.”（记住，生产出来的代码行数，是你的负债，而不是你的成就。）</strong></p>
</blockquote>
<p>在非AI时代，写代码的行数代表着你的思考与劳动；但在AI时代，生成一万行代码可能只需要几十秒钟。很多人因此陷入了“效率幻觉”，看着屏幕上飞速滚动的代码，误以为自己的能力也随之暴涨。</p>
<p>这是一种极度危险的认知幻觉。</p>
<h3>1. 认知深度的“折叠”</h3>
<p>编程不仅仅是输出语法，更核心的是在脑海中建立逻辑模型。当你遇到一个并发瓶颈或内存泄漏问题时，你为了排查它而去翻看源码、对比不同的垃圾回收机制、调整参数——这整个“痛苦挣扎”的过程，正是你大脑神经元建立连接、内化技术底层逻辑的唯一途径。</p>
<p>如果你直接问AI“怎么解决”，AI会直接把改好的代码喂给你。你跳过了挣扎，也就跳过了认知。你的技术肌肉不仅没有得到锻炼，反而开始<strong>萎缩</strong>。</p>
<h3>2. 丧失对复杂系统的控制力</h3>
<p>用AI拼凑出来的项目，在初期确实能跑得很快。但因为你没有亲手参与底层架构的微调，随着项目规模扩大，各个模块之间的耦合、并发冲突、边界条件会像雪崩一样爆发。由于你缺乏对这些代码的“微观掌控力”，一旦AI也无法给出正确答案时，你将面对满屏报错束手无策。</p>
<h2>Senior与Junior的AI使用界限</h2>
<p>在技术团队中，你会发现一个有趣的现象：<strong>资深工程师（Senior）用AI效率翻倍，而初学者（Junior）用AI却越来越平庸。</strong></p>
<p>这背后的本质差异在于：<strong>你是否拥有“代码品味（Code Smell）”和“系统直觉”。</strong></p>
<ul>
<li><strong>资深工程师的模式：【主导与审查】</strong></li>
</ul>
<p>高级开发人员对系统架构、设计模式、性能瓶颈有着深刻的肉体记忆。当他们使用AI时，他们把AI当作一个速度极快的“草稿撰写员”。AI给出的方案，Senior一眼就能看出哪里有潜在的内存泄漏，哪里不符合并发安全。他们是在<strong>评审（Review）</strong> AI，始终掌握着主导权。</p>
<ul>
<li><strong>初学者的模式：【盲从与执行】</strong></li>
</ul>
<p>初学者由于没有建立起完整的技术品味，无法分辨AI给出的方案到底是优雅的还是埋了雷的（即AI生成的“Slop/代码垃圾”）。初学者往往选择无条件信任，甚至连变量名、异常处理都直接套用。</p>
<p>一位大厂技术面试官在贴子中坦言：</p>
<blockquote>
<p><em>“在最近的面试中，我看到了初级候选人<strong>理解能力的全面崩溃（collapse of comprehension）</strong>。他们能用AI在10天内做出一套复杂的分布式系统，但当我问及其中一个数据一致性问题是如何在Go中保证的，或者让他们手写一个简单的通道（channel）协作时，他们彻底哑口无言。”</em></p>
</blockquote>
<p>这就是盲目依赖AI代写的代价：你以为你开挂了，其实你只是把自己的大脑外包了。</p>
<h2>非主流学习指南（以Go语言为例）</h2>
<p>那么，在AI时代，正确的学习姿势到底是什么？这套“非主流”路径建议你打印出来，贴在电脑旁。</p>
<h3>第一步：开启“Cold Turkey（冷火鸡）”阶段，强制肌肉记忆</h3>
<p>在学习一门新技术（如Go语言）的前几个月，<strong>请狠心关掉你IDE里的所有AI辅助插件（如Copilot、Cursor的Tab补全）。</strong></p>
<p>Go语言的设计哲学是 <em>“Clear is better than clever”</em>。它的语法极其克制，没有复杂的语法糖。这使它成为最适合用古法一行行敲击来建立肌肉记忆的语言。</p>
<ul>
<li>亲手去写每一个 if err != nil 的错误处理；</li>
<li>亲手去体验指针传递与值传递的区别；</li>
<li>亲手写一个基础的 for range 循环。</li>
</ul>
<p>在这个阶段，<strong>痛苦是你的朋友</strong>。那些因为拼写错误、类型不匹配导致的编译失败，正是你建立语言直觉的养料。</p>
<h3>第二步：系统化输入优先（先建立拼图框，再填充碎片）</h3>
<p>AI最擅长提供零散的代码片段，但它无法为你提供系统的知识框架。因此，必须坚持阅读经典。</p>
<ul>
<li><strong>官方 Spec 优先</strong>：去读Go的官方文档《Effective Go》，去理解为什么官方不推荐使用过于复杂的技巧，而是强调代码的可读性。</li>
<li><strong>经典图书不可替代</strong>：通读一本如《The Go Programming Language》这样的硬核著作，或《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》这样的系统化的专栏。书本/专栏能够提供一条由浅入深、逻辑连贯的学习脉络，这是AI那碎片化的回答永远无法提供的。</li>
</ul>
<h3>第三步：将AI角色重塑为“苏格拉底私人导师”</h3>
<p>这是整套指南中最关键的改变：<strong>禁止让AI帮你写代码，强制让AI教你思考。</strong></p>
<p>每次遇到难题，不要问 <em>“帮我用Go写一个高并发的爬虫”</em>，而是使用以下<strong>苏格拉底提问提示词（Prompt Template）</strong>：</p>
<blockquote>
<p><strong>苏格拉底学习 Prompt 模板：</strong></p>
<p><em>“我现在正在学习Go语言的 [并发控制/通道/接口] 概念。在解决 [具体问题] 时，我卡住了。请你扮演一位资深的、注重启发式教学的导师。</em></p>
<p><em>在接下来的对话中，请严格遵守以下规则：</em><br />
  1. <em>绝对不要直接给我写出最终的代码答案。</em><br />
  2. <em>请指出我思路中可能存在的盲区或不合理的设计。</em><br />
  3. <em>用反问、类比或拆分步骤的方式，一步步引导我自己写出正确的代码。</em><br />
  4. <em>如果我的代码运行出错，请帮我分析报错信息背后的底层逻辑，而不是直接给出修改后的代码。</em></p>
<p><em>我的初步代码/想法如下：[贴出你的尝试]</em>”</p>
</blockquote>
<p>通过这种方式，AI从一个“抢你饭碗的枪手”，变成了一个“24小时无条件陪伴、温和且博学的私人教授”。</p>
<h3>第四步：构建“双向反馈回路”</h3>
<ol>
<li><strong>自己先写</strong>：哪怕写得再烂，也要自己先用最基础的方式把功能实现。</li>
<li><strong>让AI Review</strong>：功能跑通后，把代码发给AI：“这是我自己实现的Go并发下载器。请站在资深Go开发者的角度，帮我挑挑刺。这里有没有通道泄露的风险？有没有更地道的写法（Idiomatic Go）？”</li>
<li><strong>对比重构</strong>：理解AI给出的优化建议，然后<strong>关掉AI的窗口，自己手动在编辑器里把优化后的代码重写一遍</strong>。</li>
</ol>
<h2>小结：在无限代码的时代，做掌握源头的人</h2>
<p>在这个时代，最不缺的就是代码。随着大模型代码生成能力的指数级演进，写代码的成本正在无限趋近于零。</p>
<p>但正因如此，<strong>能够看懂代码、评估系统风险、做出架构决策的人，其价值正在成倍增长。</strong></p>
<ul>
<li><strong>平庸的开发者</strong>：只学会了如何向AI索要现成的螺丝钉，一旦系统倒塌，他们不知道哪颗螺丝出了问题。</li>
<li><strong>顶级的开发者</strong>：借助AI导师，以极快的速度弄懂了整个系统的构造原理，他们亲手组装，对每一个接口、每一次并发、每一处内存分配都了如指掌。</li>
</ul>
<p>在AI时代，学习技术不是为了和AI比拼速度，而是为了<strong>借由AI的博学，更快、更深地抵达技术的本质。</strong></p>
<p>关掉你的IDE/Copilot自动补全，打开一本经典的Go语言书，准备好你的键盘。</p>
<p>属于你的深水区探索，才刚刚开始。</p>
<p>资料链接：https://www.reddit.com/r/golang/comments/1tsxbd4/how_do_you_guys_actually_learn_stuff_in_this_ai/</p>
<hr />
<p>为了便于你随时温习，我将这套<strong>“AI时代非主流学习法”</strong>整理成了4条核心原则，建议截图保存：</p>
<ol>
<li><strong>主动戒断，重建肌肉记忆</strong>：在学习一门新技术（如Go语言）的前期，强制关闭所有AI代码自动补全。像前AI时代的程序员一样，亲手敲下每一行代码、解决每一次报错。</li>
<li><strong>系统输入，构建认知地图</strong>：拒绝用碎片化的AI回答代替系统学习。坚持阅读官方规范（Spec）和经典书籍，先在脑海中画出技术拼图的“边框”。</li>
<li><strong>重塑定位，将AI降级为导师</strong>：严禁向AI要直接的代码答案。使用“苏格拉底式提示词”，引导AI指出你的逻辑漏洞、解释底层原理、启发你独立思考。</li>
<li><strong>闭环反馈，完成深度重构</strong>：永远坚持“自己先写 -> AI审查 -> 闭环重构”的三步法。在对比与亲手重写中，真正内化代码的“好坏品味”。</li>
</ol>
<hr />
<p><strong>今日开放讨论</strong></p>
<p>学习的本质是思维的碰撞，面对汹涌而来的AI浪潮，我想听听你的真实想法：</p>
<ol>
<li><strong>你目前在学习或工作时，对AI（如GitHub Copilot, Cursor, Claude Code等）的依赖程度有多高？</strong></li>
<li><strong>在日常开发中，你是否也曾经历过“代码虽然跑通了，但感觉自己像个骗子”的空虚瞬间？你是如何克服这种技术焦虑的？</strong></li>
<li><strong>除了文中提到的“苏格拉底提问法”，你在用AI辅助学习时，还有哪些秘而不宣的“神级提示词”或实用技巧？</strong></li>
</ol>
<p>欢迎在评论区留下你的深度思考。</p>
<p>如果这篇内容对你有启发，欢迎<strong>点赞、转发、收藏</strong>，你的支持是我持续输出硬核思考的最大动力。</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go 生态17年大浪淘沙：2026年最值得引入的10个“神仙级”QoL工具包</title>
		<link>https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026/</link>
		<comments>https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026/#comments</comments>
		<pubDate>Tue, 02 Jun 2026 23:48:26 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[ArchitectureDesign]]></category>
		<category><![CDATA[Chi]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[CLI工具]]></category>
		<category><![CDATA[cloudnative]]></category>
		<category><![CDATA[ConfigurationManagement]]></category>
		<category><![CDATA[DatabaseMigration]]></category>
		<category><![CDATA[env]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[GoEcosystem]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[goose]]></category>
		<category><![CDATA[Go生态]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[HotReload]]></category>
		<category><![CDATA[KONG]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[middleware]]></category>
		<category><![CDATA[pgx]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[QoL]]></category>
		<category><![CDATA[slog]]></category>
		<category><![CDATA[sqlc]]></category>
		<category><![CDATA[standardlibrary]]></category>
		<category><![CDATA[StructuredLogging]]></category>
		<category><![CDATA[task]]></category>
		<category><![CDATA[TaskRunner]]></category>
		<category><![CDATA[testify]]></category>
		<category><![CDATA[TypeSafety]]></category>
		<category><![CDATA[Unittest]]></category>
		<category><![CDATA[中间件]]></category>
		<category><![CDATA[云原生]]></category>
		<category><![CDATA[任务编排]]></category>
		<category><![CDATA[单元测试]]></category>
		<category><![CDATA[开发幸福感]]></category>
		<category><![CDATA[微服务]]></category>
		<category><![CDATA[数据库迁移]]></category>
		<category><![CDATA[架构设计]]></category>
		<category><![CDATA[标准库]]></category>
		<category><![CDATA[热重载]]></category>
		<category><![CDATA[环境变量]]></category>
		<category><![CDATA[生产效率]]></category>
		<category><![CDATA[类型安全]]></category>
		<category><![CDATA[结构化日志]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6394</guid>
		<description><![CDATA[本文永久链接 &#8211; 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 ne SELECT * FROM users WHERE id = $1 LIMIT 1; 运行 sqlc generate，它会自动为你生成编译期安全的 Go 函数。你直接调用即可，性能等同于手写原生代码，且任何 SQL 语法错误都会在编译阶段被捕获： user, err := q.GetUser(ctx, userID) 标准库路由增强：chi（优雅的轻量骨架） [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/10-god-tier-go-qol-libraries-to-use-in-2026-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026">本文永久链接</a> &#8211; https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026</p>
<p>大家好，我是Tony Bai。</p>
<p>在软件工程中，有一个词叫 <strong>QoL（Quality of Life，生产体验/开发幸福感）</strong>。</p>
<p>Go语言（Golang）凭借极简的语法、强悍的并发能力和超快的编译速度，成为了现代后端和云原生的绝对主力。但坦率地说，Go在某些时候的开发体验并不算完美：为了坚持“显式优于隐式”的原则，我们不得不手写大量的样板代码（Boilerplate），甚至在处理路由、数据库迁移、环境配置时，常常感到有些繁琐。</p>
<p>Go诞生至今已经17年。到了2026年的今天，Go生态经历了大浪淘沙般的洗牌。曾经风靡一时的保姆级“全家桶”框架逐渐失宠，取而代之的是<strong>“轻量、模块化、对标准库极度友好”的拼图式架构</strong>。</p>
<p>今天，结合Go开发者社区的共识，我为你整理出<strong>2026年最值得引入的10个“神仙级”QoL工具包</strong>。它们不改变Go的底层哲学，却能让你的开发体验、代码品味和生产效率产生质的飞跃。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/database-design-practices-pr.png" alt="" /></p>
<h2>数据库编译器：sqlc（类型安全的终极救星）</h2>
<ul>
<li><strong>解决痛点</strong>：传统的 ORM（如 GORM）依赖大量的运行时反射，性能较差，且字段写错只有在运行时才会崩溃；手写 database/sql 又有太多的字符串拼接和样板代码。</li>
<li><strong>神仙之处</strong>：sqlc 改变了游戏规则。你只需要写原生 SQL 语句，它就会帮你生成<strong>100%类型安全、无反射、编译期排错</strong>的干净 Go 代码。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<p>首先编写原生的 SQL 语句文件：</p>
<pre><code class="sql">-- name: GetUser <img src='https://tonybai.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ne
SELECT * FROM users WHERE id = $1 LIMIT 1;
</code></pre>
<p>运行 sqlc generate，它会自动为你生成编译期安全的 Go 函数。你直接调用即可，性能等同于手写原生代码，且任何 SQL 语法错误都会在<strong>编译阶段</strong>被捕获：</p>
<pre><code class="go">user, err := q.GetUser(ctx, userID)
</code></pre>
<h2>标准库路由增强：chi（优雅的轻量骨架）</h2>
<ul>
<li><strong>解决痛点</strong>：很多大框架侵入性太强，自定义了大量的 Context 和 Handler 签名，与标准库 net/http 严重割裂。</li>
<li><strong>神仙之处</strong>：chi 100% 兼容 Go 标准库的 http.Handler。它不试图替代标准库，只是在标准库之上优雅地实现了路由分组、路径参数解析和中间件。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<pre><code class="go">r := chi.NewRouter()
r.Use(middleware.Logger) // 极简的中间件支持

r.Route("/v1/api", func(r chi.Router) {
    r.Get("/users/{id}", getUserHandler) // 完美的路径参数支持
})
</code></pre>
<h2>PostgreSQL 黄金搭档：pgx（告别底层的平庸）</h2>
<ul>
<li><strong>解决痛点</strong>：标准库的 database/sql 为了通用性，抹平并折损了特定数据库的优秀特性。</li>
<li><strong>神仙之处</strong>：如果你在 2026 年使用 PostgreSQL，pgx 是无可争议的行业标准。它不仅速度比通用驱动快数倍，还完美支持 Postgres 特有的二进制协议、批量导入（Copy Protocol）以及复合类型。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<pre><code class="go">// 使用 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),
)
</code></pre>
<h2>终极断言利器：testify（让测试回归享受）</h2>
<ul>
<li><strong>解决痛点</strong>：Go 官方自带的测试没有提供 Assert 方法，导致断言里充斥着枯燥的 if got != want { t.Errorf(&#8230;) }。</li>
<li><strong>神仙之处</strong>：testify 是Go测试生态的无冕之王。它提供极其直观、可读性拉满的断言 API，同时完全不改变 go test 的运行机制。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<pre><code class="go">import "github.com/stretchr/testify/assert"

func TestCalculate(t *testing.T) {
    res, err := Calculate()
    assert.NoError(t, err)          // 优雅的无错断言
    assert.Equal(t, 42, res)         // 简洁的值断言
}
</code></pre>
<h2>结构化日志标配：log/slog（官方终结战争）</h2>
<ul>
<li><strong>解决痛点</strong>：第三方日志库（Zap, Logrus）割裂了社区，引入它们往往会带来沉重的外部依赖和版本冲突。</li>
<li><strong>神仙之处</strong>：Go 内置的 slog 自 1.21 版本起已成为官方推荐的结构化日志方案，大幅降低了引入第三方日志库的必要性。作为标准库，它提供了高性能、标准化的结构化日志输出，完美支持 JSON 格式，直接节省了引入第三方日志库的开销。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<pre><code class="go">import "log/slog"

// 输出标准的JSON结构化日志，无缝接入ELK或Loki
slog.Info("payment_processed",
    slog.String("tx_id", "tx_998"),
    slog.Float64("amount", 299.9),
)
</code></pre>
<h2>云原生配置解析：caarlos0/env（让环境变量回归整洁）</h2>
<ul>
<li><strong>解决痛点</strong>：使用 Viper 解析配置过于沉重，配置文件格式（JSON/YAML）在云原生和 Docker 容器部署中往往不如环境变量灵活。</li>
<li><strong>神仙之处</strong>：符合“12-Factor App”原则，通过 Struct Tag 极其优雅、轻量地解析环境变量，避免了繁琐的手工类型转换。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<pre><code class="go">type ServerConfig struct {
    Port    int      env:"PORT" envDefault:"8080"
    APIKeys []string env:"API_KEYS" envSeparator:","
}

cfg := ServerConfig{}
if err := env.Parse(&amp;cfg); err != nil { // 一步完成类型转换、默认值注入和必填校验
    log.Fatal(err)
}
</code></pre>
<h2>优雅的 CLI 构造器：alecthomas/kong（告别 Cobra 的臃肿）</h2>
<ul>
<li><strong>解决痛点</strong>：Cobra 虽有名，但代码生成量巨大，API 极其复杂，对轻量级 CLI 工具来说显得有些喧宾夺主。</li>
<li><strong>神仙之处</strong>：<a href="http://github.com/alecthomas/kong">kong</a> 采用“声明式”设计，你只需要定义一个 Go 结构体，它就会自动为你生成命令行解析、子命令路由和极其美观的 &#8211;help 自动生成。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<pre><code class="go">var CLI struct {
    Ping struct {
        Host string help:"Host to ping." required:""
    } cmd:"" help:"Ping a host."
}

ctx := kong.Parse(&amp;CLI)
// 根据子命令自动路由，结构极其清晰
</code></pre>
<h2>数据库版本控制：pressly/goose（丝滑的数据库迁移）</h2>
<ul>
<li><strong>解决痛点</strong>：在团队协作中，数据库 Schema 的变更同步和回滚往往非常混乱。</li>
<li><strong>神仙之处</strong>：<a href="https://github.com/pressly/goose">goose</a> 支持用纯 SQL 或 Go 代码编写迁移脚本，完美支持向前/向后（Up/Down）版本控制，能无缝嵌入到 CI/CD 流程中。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<p>在终端中简单执行：</p>
<pre><code class="bash"># 使用环境变量方式（更简洁）
# 创建一个迁移文件
# 在生成的 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
</code></pre>
<h2>摆脱 Makefile：go-task/task (Taskfile)（跨平台任务编排）</h2>
<ul>
<li><strong>解决痛点</strong>：Makefile 语法晦涩且多平台不兼容，在 Windows 平台上的支持体验较差。</li>
<li><strong>神仙之处</strong>：<a href="https://github.com/go-task/task">task（Taskfile）</a>使用直观的 YAML 语法，跨平台通用，支持任务依赖分析、条件执行和极佳的终端输出。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<p>在根目录下编写 Taskfile.yml：</p>
<pre><code class="yaml">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 ./...
</code></pre>
<h2>热重载神器：air-verse/air（让本地开发如丝般顺滑）</h2>
<ul>
<li><strong>解决痛点</strong>：每次修改 Go 代码后，都需要手动在终端执行 Ctrl+C 然后重新编译运行，严重打断开发心流。</li>
<li><strong>神仙之处</strong>：<a href="https://github.com/air-verse/air">air</a> 监听项目目录的文件变动，在后台自动、极速地重新编译并运行，带给 Go 开发者不亚于前端热更新的实时反馈体验。</li>
<li><strong>实操场景</strong>：</li>
</ul>
<p>在项目根目录直接输入：</p>
<pre><code class="bash">air
</code></pre>
<p>从此放开双手，专注于代码的编写，保存即生效。</p>
<h2>2026年Go开发者的“神仙套包”黄金搭配图</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2026/10-god-tier-go-qol-libraries-to-use-in-2026-2.png" alt="" /></p>
<h2>小结</h2>
<p>Go 生态的发展，是一个<strong>从“迷信全家桶大框架”回归到“小而美精细化拼装”</strong>的过程。</p>
<p>这 10 个神仙级 QoL 工具包，没有任何一个是试图颠覆 Go 语言设计哲学的。相反，它们都像一块块精密的齿轮，严丝合缝地扣在标准库周围，默默地为你扫清开发路上的琐碎障碍。</p>
<p>用最克制的框架，写最健壮的代码。这，才是 2026 年写 Go 该有的风骨。</p>
<p>资料链接：https://www.reddit.com/r/golang/comments/1tryel9/im_new_to_golang_which_are_the_quality_of_life/</p>
<hr />
<p><strong>今日开放讨论</strong></p>
<ol>
<li><strong>在这 10 个神仙级 QoL 包中，你已经在生产环境使用了哪几个？哪个工具最能提升你的开发“幸福感”？</strong></li>
<li><strong>在 ORM 选型上，你更青睐传统的 GORM、Ent，还是文中推荐的、编译期安全的 sqlc？为什么？</strong></li>
<li><strong>你觉得 Go 官方未来应该把今天提到的哪个包（如 testify 的 assert 功能）直接吸送到标准库中？</strong></li>
</ol>
<p>欢迎在评论区分享你的实战经验与深度见解，让我们一起精进代码品味！</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>再见样板代码！Go 官方新提案：函数一键转接口</title>
		<link>https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion/</link>
		<comments>https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion/#comments</comments>
		<pubDate>Tue, 02 Jun 2026 00:21:48 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AdapterPattern]]></category>
		<category><![CDATA[AnonymousFunctions]]></category>
		<category><![CDATA[BoilerplateCode]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[CodeAesthetics]]></category>
		<category><![CDATA[CompileTime]]></category>
		<category><![CDATA[FunctionToInterface]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[Interfaces]]></category>
		<category><![CDATA[Issue47487]]></category>
		<category><![CDATA[PerformanceOptimization]]></category>
		<category><![CDATA[proposal]]></category>
		<category><![CDATA[Reflection]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[TypeConversion]]></category>
		<category><![CDATA[TypeSafety]]></category>
		<category><![CDATA[代码美学]]></category>
		<category><![CDATA[函数转接口]]></category>
		<category><![CDATA[匿名函数]]></category>
		<category><![CDATA[反射]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[提案]]></category>
		<category><![CDATA[样板代码]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[类型安全]]></category>
		<category><![CDATA[类型转换]]></category>
		<category><![CDATA[编译期]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[适配器模式]]></category>
		<category><![CDATA[闭包]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6390</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion 大家好，我是Tony Bai。 在 Go 语言日常开发中，有一个设计几乎人人写过，但写多了又让人觉得极其繁琐、甚至有些“脱裤子放屁”的样板代码。 假设你需要一个只读数据的 io.Reader，但它的行为非常简单（比如只是为了在测试里模拟数据），你通常需要这样写： type ReaderFunc func(p []byte) (n int, err error) func (f ReaderFunc) Read(p []byte) (n int, err error) { return f(p) } 紧接着，在代码中通过 io.Reader(ReaderFunc(myFunc)) 进行双重套娃调用。 这种设计被称为 “适配器型定义”（如标准库中的 http.HandlerFunc）。虽然它工作得很好，但如果每个包都需要针对自己的单方法接口（Single-method Interface）定义一遍这种暖场代码，整个项目就会充斥着大量无意义的样板代码（Boilerplate）。 为了终结这个痛点，Go 语言的积极贡献者 Merovius 提交了一项提案——Issue #47487：允许将函数显式转换为单方法接口。 目前，该提案已被列为Active状态，并有了原型实现（CL 572835）。它不仅能让 Go 代码的清爽度提升一个量级，更是对 Go 语言底层类型系统的一次精妙微调。 痛点拷问：为什么我们讨厌“套娃”代码？ 在复杂的微服务或系统级开发中，我们经常需要临时“包装”一些行为。比如，你想设计一个 io.Writer，用来统计实际写入了多少个字节： // 传统写法：你需要定义一个专门的结构体 type [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/no-more-boilerplate-go-proposal-function-to-interface-conversion-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion">本文永久链接</a> &#8211; https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion</p>
<p>大家好，我是Tony Bai。</p>
<p>在 Go 语言日常开发中，有一个设计几乎人人写过，但写多了又让人觉得极其繁琐、甚至有些“脱裤子放屁”的样板代码。</p>
<p>假设你需要一个只读数据的 io.Reader，但它的行为非常简单（比如只是为了在测试里模拟数据），你通常需要这样写：</p>
<pre><code class="go">type ReaderFunc func(p []byte) (n int, err error)

func (f ReaderFunc) Read(p []byte) (n int, err error) {
    return f(p)
}
</code></pre>
<p>紧接着，在代码中通过 io.Reader(ReaderFunc(myFunc)) 进行双重套娃调用。</p>
<p>这种设计被称为 <strong>“适配器型定义”</strong>（如标准库中的 http.HandlerFunc）。虽然它工作得很好，但如果每个包都需要针对自己的单方法接口（Single-method Interface）定义一遍这种暖场代码，<strong>整个项目就会充斥着大量无意义的样板代码（Boilerplate）。</strong></p>
<p>为了终结这个痛点，Go 语言的积极贡献者 Merovius 提交了一项提案——<a href="https://github.com/golang/go/issues/47487">Issue #47487</a>：允许将函数显式转换为单方法接口。</p>
<p>目前，该提案已被列为Active状态，并有了原型实现（<a href="https://go.dev/cl/572835">CL 572835</a>）。它不仅能让 Go 代码的清爽度提升一个量级，更是对 Go 语言底层类型系统的一次精妙微调。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/ai-era-software-engineer-algorithm-map-qr.png" alt="" /></p>
<h2>痛点拷问：为什么我们讨厌“套娃”代码？</h2>
<p>在复杂的微服务或系统级开发中，我们经常需要临时“包装”一些行为。比如，你想设计一个 io.Writer，用来统计实际写入了多少个字节：</p>
<pre><code class="go">// 传统写法：你需要定义一个专门的结构体
type countingWriter struct {
    w io.Writer
    n int64
}

func (w *countingWriter) Write(p []byte) (n int, err error) {
    n, err = w.w.Write(p)
    w.n += int64(n)
    return n, err
}

func main() {
    cw := &amp;countingWriter{w: os.Stdout}
    // 写入数据到 cw
    fmt.Println(cw.n, "bytes written")
}
</code></pre>
<p>为了实现一个简单的计数逻辑，你被迫写了十多行结构体和方法定义。更糟糕的是，这破坏了内聚性——countingWriter 往往只用一次，却污染了整个包的命名空间。</p>
<p>现在，看看新提案下，利用<strong>闭包（Closure）</strong>和<strong>函数转接口</strong>后的极致美学：</p>
<pre><code class="go">func main() {
    var N int64
    // 核心：直接把匿名函数转换为 io.Writer 接口！
    cw := io.Writer(func(p []byte) (n int, err error) {
        n, err = os.Stdout.Write(p)
        N += int64(n)
        return n, err
    })
    // 写入数据到 cw
    fmt.Println(N, "bytes written")
}
</code></pre>
<p><strong>对比极其鲜明：代码行数缩减了一半，状态逻辑（N）被完美锁死在当前函数作用域内，没有任何多余的结构体命名，逻辑高内聚。</strong></p>
<h2>方案博弈：为什么是显式“类型转换”，而不是“自动赋值”？</h2>
<p>其实，社区早在几年前就提过更激进的提案（#21670）：<strong>允许将函数直接、隐式地赋值给匹配的单方法接口（Assignability）。</strong></p>
<p>但是，该提案很快遭到了 Go 核心团队的否决，原因在于<strong>隐式赋值的二义性与安全隐患</strong>。</p>
<p>最经典的例子：</p>
<p>io.Reader 和 io.Writer 的核心方法，其函数签名是完全相同的：</p>
<ul>
<li>Read(p []byte) (n int, err error)</li>
<li>Write(p []byte) (n int, err error)</li>
</ul>
<p>如果允许隐式赋值，当你写下 var x = func(p []byte) (int, error) { &#8230; } 时，编译器根本无法得知你这个函数到底是一个“读者”还是一个“写者”。</p>
<p>为了守护 Go 语言类型安全、意图清晰的底层哲学，<strong>#47487 采取了折中但极度务实的路线：要求必须进行显式类型转换（Convertibility）。</strong></p>
<pre><code class="go">// 必须显式声明你要转换成什么接口
r := io.Reader(myFunc)
w := io.Writer(myFunc)
</code></pre>
<p>程序员必须显式、大声地告诉编译器：<strong>“我知道这个函数签名的含义，现在我要把它当做 Reader/Writer 来用。”</strong> 这完美规避了隐式匹配导致的逻辑混乱。</p>
<h2>编译器背后的魔法：如何处理反射与断言？</h2>
<p>这是一个看似简单的语法糖，但对 Go 编译器的底层设计提出了巨大的挑战。</p>
<p>在 Go 语言的底层设计中，有一个坚不可摧的铁律：<strong>只有被定义（Defined）的类型才能携带方法，未命名类型（如普通的 func 类型）是没有方法集的。</strong></p>
<p>如果我们将一个普通的匿名函数转换为了 io.Reader 接口，当我们对这个接口进行反射（reflect.TypeOf）或类型断言时，底层的动态类型（Dynamic Type）到底是什么？</p>
<p>为了解决这个“Trilemma（三难困境）”，Go 团队在原型 CL 572835 中展示了编译器的底层魔法：<strong>在编译期，自动生成虚拟的未导出类型。</strong></p>
<p>当你写下 io.Reader(func&#8230;) 时，Go 编译器会在幕后自动为你生成一个类似于 runtime.io_reader.func 或 runtime.autogenerated_xxx 的未导出定义类型。它拥有一个名为 Read 的方法，该方法在调用时会直接执行你传入的函数体。</p>
<p>这种设计的精妙之处在于：</p>
<ol>
<li><strong>完全向后兼容</strong>：不破坏任何既有反射代码的假设。</li>
<li><strong>不破坏语法直觉</strong>：由于自动生成的类型是未导出的，用户无法对其进行电击治疗（比如无法直接对这个虚拟类型进行类型断言），从而保证了底层的干净。</li>
</ol>
<h2>官方自曝：标准库里到底有多少无用的“套娃”代码？</h2>
<p>在 Issue 的辩论中，Merovius 对 Go 语言的标准库进行了一次扫描，揭露了如果没有这个特性，标准库自己写得有多纠结：</p>
<ul>
<li><strong>测试代码中的大量复制</strong>：在标准库测试中，存在大量为了测试 io.Reader、io.Writer、io.Closer 而定义的临时函数类型。</li>
<li><strong>同名不同命的尴尬</strong>：在 net/http 包中，为了支持函数转换，居然定义了两个功能、签名完全一致，但由于在不同测试文件而名称不同的类型——funcWriter 和 writerFunc。</li>
<li><strong>为了便利被迫暴露 API</strong>：因为没有原生语言支持，标准库不得不主动暴露出一些公共辅助类型，比如 net/http.HandlerFunc、cmd/go 内部的 ActorFunc、以及 x/mod 的 HashReaderFunc。</li>
</ul>
<p>如果这项提案落地，标准库中数十个这样“脱裤子放屁”的适配器定义和重复代码，将在瞬间被全部清理干净。</p>
<p>对于第三方库（如各类 mock 框架、测试断言库）来说，这也意味着繁琐的 Fake 实现可以被一键简化为极简的匿名函数传入。</p>
<h2>小结：这就是 Go 务实的进化美学</h2>
<p>在 Issue #47487 漫长的拉锯战中，我们可以清晰地感受到 Go 团队在面对语言进化时的审慎。</p>
<p>Go 从不轻易引入新的语法，每一次特性的加入，都要经历长达数年、多方视角的拷问与权衡。他们拒绝了不安全的隐式匹配，也拒绝了过于复杂的通用接口字面量，最终停在了一个<strong>“用显式类型转换，在编译器内部生成虚拟类型”</strong>的务实方案上。</p>
<p>这正是 Go 语言长盛不衰的工程美学：<strong>宁可让语言显得有些“无聊”和“保守”，也绝不在运行时的安全性和可预测性上做出半步妥协。</strong></p>
<p>随着 CL 572835 原型的不断完善，我们有望在不久的将来，彻底告别写各种 HandlerFunc 的繁琐日常，让 Go 代码重新回归极致的清爽。</p>
<p>资料链接：</p>
<ul>
<li>https://github.com/golang/go/issues/47487</li>
<li>https://go.dev/cl/572835</li>
</ul>
<hr />
<p><strong>今日互动讨论：</strong></p>
<p>你赞同 Go 官方坚持使用“显式转换（Explicit Conversion）”而不是“隐式自动匹配（Implicit Assignability）”的设计吗？在你的日常项目中，有哪些单方法接口（如 http.Handler 或自定义业务处理器）能被这个新特性瞬间治愈？</p>
<p>欢迎在评论区留下你的硬核见解，我们一起聊聊 Go 语言的演进之道！</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>写代码快 10 倍，不等于研发快 10 倍！Google 揭秘 AI 系统级瓶颈</title>
		<link>https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck/</link>
		<comments>https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck/#comments</comments>
		<pubDate>Sun, 31 May 2026 22:19:16 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AdamBender]]></category>
		<category><![CDATA[Agent]]></category>
		<category><![CDATA[ArchitectureDesign]]></category>
		<category><![CDATA[ArtificialIntelligence]]></category>
		<category><![CDATA[CI/CD流水线]]></category>
		<category><![CDATA[CIDDPipeline]]></category>
		<category><![CDATA[CodeGeneration]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[ConwaysLaw]]></category>
		<category><![CDATA[DependencyConflicts]]></category>
		<category><![CDATA[GoogleIO2026]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[monolith]]></category>
		<category><![CDATA[SocioTechnicalSystems]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[TechnicalDebt]]></category>
		<category><![CDATA[TestCoverage]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[代码审查]]></category>
		<category><![CDATA[代码生成]]></category>
		<category><![CDATA[依赖冲突]]></category>
		<category><![CDATA[单体架构]]></category>
		<category><![CDATA[康威定律]]></category>
		<category><![CDATA[微服务]]></category>
		<category><![CDATA[技术债]]></category>
		<category><![CDATA[智能体]]></category>
		<category><![CDATA[架构设计]]></category>
		<category><![CDATA[测试覆盖率]]></category>
		<category><![CDATA[社会技术系统]]></category>
		<category><![CDATA[软件工程]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6386</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck 大家好，我是Tony Bai。 在过去的两年里，所有的开发者都在经历一场前所未有的“效率狂欢”。 随着大语言模型（LLM）和编码智能体的突飞猛进，各种“一键生成应用”、“10倍速程序员”的口号不绝于耳。仿佛只要给 AI 喂一句自然语言，它就能吐出一个完美的架构。 然而，在刚刚结束的 Google I/O 2026 大会上，Google 首席工程师 Adam Bender 用一场名为《Software engineering at the tipping point》（处于临界点的软件工程）的硬核演讲，狠狠地戳破了这个幻觉。 Adam 在演讲中抛出了一个极其反直觉的观点： “能够 10 倍速地生成代码，绝对不等于你能成为 10 倍速的工程师。” 如果你以为 AI 的引入只是让你的代码写得更快，那么你的团队、你的系统，甚至是你的职业生涯，都将在未来 18 个月内面临一场灭顶之灾。 为什么？因为我们忽略了一个比代码更庞大、更脆弱的存在——软件生态系统（Software Ecology），即软件不仅仅是代码的堆砌，它是一个由代码、工具、流程和人类文化共同编织的复杂社会技术系统（Socio-technical system）。 今天，我们就来深度拆解这场震撼硅谷的技术演讲，看看在 AI 洪流的冲击下，到底什么会被毁灭，什么又将成为我们不可替代的核心护城河。 打破“代码崇拜”：你不仅在写代码，你在经营一个“生态系统” 在讨论 AI 之前，我们必须先认清一个残酷的现实：你的工作，并不是你想象的那样。 很多开发者以为自己的工作就是“写代码”。但在一家现代科技公司里，写代码只占你工作的冰山一角。你真正的日常是：查阅文档、提交 PR、代码审查（Code Review）、等待 CI/CD 流水线构建、排查诡异的依赖冲突、以及参与无休止的架构撕逼会。 Adam 在演讲中引入了一个极其关键的概念：社会技术系统（Socio-technical systems）。 什么意思？就是说，你每天工作的环境，不仅仅是一堆没有感情的服务器和代码库（Technical），它还包括了活生生的人、组织的价值观、激励机制和沟通文化（Socio）。这两个部分紧密咬合，互相塑造。 这就是大名鼎鼎的康威定律（Conway&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck">本文永久链接</a> &#8211; https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck</p>
<p>大家好，我是Tony Bai。</p>
<p>在过去的两年里，所有的开发者都在经历一场前所未有的“效率狂欢”。</p>
<p>随着大语言模型（LLM）和编码智能体的突飞猛进，各种“一键生成应用”、“10倍速程序员”的口号不绝于耳。仿佛只要给 AI 喂一句自然语言，它就能吐出一个完美的架构。</p>
<p>然而，在刚刚结束的 <strong>Google I/O 2026 大会</strong>上，Google 首席工程师 Adam Bender 用一场名为《<a href="https://www.youtube.com/watch?v=2n41YjR5QfU">Software engineering at the tipping point</a>》（处于临界点的软件工程）的硬核演讲，狠狠地戳破了这个幻觉。</p>
<p>Adam 在演讲中抛出了一个极其反直觉的观点：</p>
<p><strong>“能够 10 倍速地生成代码，绝对不等于你能成为 10 倍速的工程师。”</strong></p>
<p>如果你以为 AI 的引入只是让你的代码写得更快，那么你的团队、你的系统，甚至是你的职业生涯，都将在未来 18 个月内面临一场灭顶之灾。</p>
<p>为什么？因为我们忽略了一个比代码更庞大、更脆弱的存在——<strong>软件生态系统（Software Ecology）</strong>，即软件不仅仅是代码的堆砌，它是一个由代码、工具、流程和人类文化共同编织的复杂社会技术系统（Socio-technical system）。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck-2.png" alt="" /></p>
<p>今天，我们就来深度拆解这场震撼硅谷的技术演讲，看看在 AI 洪流的冲击下，到底什么会被毁灭，什么又将成为我们不可替代的核心护城河。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/agentic-software-engineering-qr.png" alt="" /></p>
<h2>打破“代码崇拜”：你不仅在写代码，你在经营一个“生态系统”</h2>
<p>在讨论 AI 之前，我们必须先认清一个残酷的现实：<strong>你的工作，并不是你想象的那样。</strong></p>
<p>很多开发者以为自己的工作就是“写代码”。但在一家现代科技公司里，写代码只占你工作的冰山一角。你真正的日常是：查阅文档、提交 PR、代码审查（Code Review）、等待 CI/CD 流水线构建、排查诡异的依赖冲突、以及参与无休止的架构撕逼会。</p>
<p>Adam 在演讲中引入了一个极其关键的概念：<strong>社会技术系统（Socio-technical systems）</strong>。</p>
<p>什么意思？就是说，你每天工作的环境，不仅仅是一堆没有感情的服务器和代码库（Technical），它还包括了活生生的人、组织的价值观、激励机制和沟通文化（Socio）。这两个部分紧密咬合，互相塑造。</p>
<p>这就是大名鼎鼎的<strong>康威定律（Conway&#8217;s Law）</strong>所揭示的真理：“组织设计出的系统，其架构必然是该组织沟通结构的缩影。”</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck-3.png" alt="" /></p>
<p>如果你的公司极度强调“稳定和不背锅”，你的架构大概率会变成一堆厚重的微服务，每次发布都要层层审批；如果你的公司崇尚“敏捷和自治”，你的代码库可能就会像一棵野蛮生长的树。</p>
<p>在这个庞大的“社会技术生态系统”中，你写下的每一行代码，都会引发整个系统的连锁反应。</p>
<p>而现在，AI 这头狂野的巨兽，正在毫无顾忌地闯入这个脆弱的生态系统中。</p>
<h2>灾难推演：当 AI 将代码量放大 10 倍，你的系统会崩溃在哪一环？</h2>
<p>AI 确实能当一个超级加速器（Amplifier）。它能给你更多的测试用例、更多的文档、更快的代码生成速度。</p>
<p>但这正是问题所在。<strong>放大（Amplification）只是一个规模变量，它本身没有方向。</strong> 如果你的基础没打好，AI 放大的就不是生产力，而是纯粹的混乱（Confusion）。</p>
<p>让我们做一次极其真实的沙盘推演：假设通过 AI 辅助，你们公司的代码产出量突然飙升了 <strong>10 倍</strong>。你会迎来乌托邦吗？不，你会迎来以下四个致命的连环崩溃：</p>
<h3>代码审查（Code Review）的瘫痪</h3>
<p>如果你的团队突然多出了 10 倍的代码，谁来 Review？</p>
<p>现在的 AI 很擅长写代码，但在大厂的架构中，它往往缺乏对全局业务上下文的长远理解。这意味着，如果你放任 AI 提交 PR，资深工程师（Tech Leads）将不得不花费海量的时间，去逐行审查那些看似能跑、但架构设计极其糟糕的代码。</p>
<p><strong>人类的注意力（Human Attention）是有限的，它将成为这场 10 倍速狂欢中最先熔断的瓶颈。</strong></p>
<h3>编译时间（Build Time）的黑洞</h3>
<p>更多的代码 = 更长的编译时间。</p>
<p>你原本引以为傲的“每日部署（Daily Release）”，可能会因为代码库的急剧膨胀，导致一次完整的构建和集成测试需要跑上好几个小时。当你发现 CI/CD 永远在排队时，你还会觉得 AI 让你变快了吗？</p>
<h3>测试与验证的雪崩</h3>
<p>你拥有了 10 倍的代码，同时 AI 也帮你生成了 10 倍的单元测试。</p>
<p>但这不仅没有让你更安全，反而可能让你的系统陷入瘫痪。为什么？因为在庞大的依赖网络中，跑完数以百万计的测试需要极其恐怖的算力成本（Compute Cost）。</p>
<p>更致命的是，如果你的发布标准是“必须所有测试通过”，那么在 100 万个测试中(注：这显然是指Google量级的代码库测试)，只要有一个 AI 生成的、带有微小偏差的测试用例失败（Flaky test），你的整个软件就无法发布。</p>
<h3>依赖地狱（Dependency Hell）的二次方爆炸</h3>
<p>在一个代码库中，依赖关系的增长通常是<strong>二次方（Quadratically）</strong>的，而不是线性的。</p>
<p>当代码库扩大 10 倍时，你的模块依赖冲突、版本不一致的问题将呈几何级数爆发。一个几十人的小团队，可能会突然陷入只有上千人规模的巨头公司才会遇到的“架构死锁”。</p>
<p>下面是Adam Bender 展示的开发者生态系统节点互联图(Common developer ecosystem components):</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck-4.png" alt="" /></p>
<p>我们看到：牵一发而动全身！代码生成只是其中一个节点，当它的产出飙升 10 倍时，版本控制、代码审查、构建工具和测试环境将全部面临过载崩溃。</p>
<h2>破局法则：在 AI 时代，我们到底该关注什么？</h2>
<p>既然单纯的代码生成速度并不能拯救我们，甚至可能毁灭系统，那么作为开发者和技术管理者，我们在这个“临界点”到底应该做什么？</p>
<p>Adam 的答案直指核心：<strong>重塑你的基础（Fundamentals）。</strong></p>
<p>在大模型席卷一切的今天，决定一家公司、一个开发团队生死存亡的，不再是你用了多么牛逼的提示词（Prompt），而是那些古老、枯燥、却不可或缺的软件工程常识：</p>
<h3>第一法则：打破盲目相信，重新定义测试策略</h3>
<p>过去，我们追求极高的测试覆盖率。但在 AI 时代，你必须学会<strong>做减法</strong>。</p>
<p>如果算力成本飙升，你不能再奢求每次提交都跑完所有测试。你需要建立基于统计学和智能分析的新型测试策略，精准找出“最需要跑的测试”，而不是盲目追求 100% 的全部绿色（All green）。</p>
<h3>第二法则：解耦，极致的解耦</h3>
<p>为了防止 10 倍的代码量带来二次方爆炸的依赖冲突，你必须重新审视系统的架构。</p>
<p>如果你依然在维护一个紧密耦合的“大单体（Monolith）”，AI 的加入只会加速它的腐烂。建立清晰的服务边界、强制的模块隔离（Isolation），是让 AI 代码能够安全落地的唯一容器。</p>
<h3>第三法则：保护人类的注意力（Human Attention）</h3>
<p>不要让资深工程师沦为 AI 代码的“人肉校对机”。</p>
<p>如果你决定用 AI 生成代码，那么你也必须用 AI 去优化审批流。但千万记住：<strong>AI 可以辅助 Review，但最终的架构权必须牢牢握在有经验的人类手里。</strong></p>
<h3>第四法则：直面“共同命运（Shared Fate）”</h3>
<p>在大型系统中，往往存在着牵一发而动全身的“共同命运（Shared Fate）”。比如，Google 的底层是一个庞大的单体仓库（Mono-repo），一次底层库的更新可能影响数十亿行代码。</p>
<p>在 AI 时代，你要极度警惕这种过度绑定。当 AI 能够瞬间制造大规模变更时，你必须拥有<strong>绝对可靠的回滚机制（Rollback）</strong>和灰度发布策略。如果你不能在秒级回滚一个破坏性的系统变更，你就绝对不能允许 AI 拥有直接上线的权力。</p>
<h2>小结：谁将主宰未来的 10 年？</h2>
<p>这不仅是一场属于 Google 的布道，这是一份写给所有开发者的生存指南。</p>
<p>AI 不会取代程序员，它只会无情地淘汰那些只会“翻译业务逻辑”的底层码农。</p>
<p>在未来的十年里，最值钱的技能，将不再是你精通多少种编程语言的语法，也不再是你敲键盘的速度。</p>
<p>最顶级的工程师，将是那些拥有<strong>“系统级思维（Systems Thinking）”</strong>的架构师：</p>
<ul>
<li>他们能够站在高处，俯瞰整个组织的技术与文化生态；</li>
<li>他们知道如何利用 AI 这个超级放大器，去构建那些曾经遥不可及的庞大系统；</li>
<li>他们更知道，在何处设置隔离墙、在何处切断依赖，以防止 AI 的狂飙突进反噬整个工程底座。</li>
</ul>
<p>代码的海洋正在以前所未有的速度膨胀。在这个波澜壮阔的航海时代，大模型只是为你提供狂风的引擎。</p>
<p>而能否避开暗礁、最终驶向那座名为“伟大产品”的彼岸，依然取决于握着达摩克利斯之剑的你——<strong>一个拥有智慧、直觉和系统大局观的人类工程师。</strong></p>
<p>资料链接：https://www.youtube.com/watch?v=2n41YjR5QfU</p>
<hr />
<p><strong>今日互动探讨：</strong></p>
<p>如果你的团队明天代码产出量突然飙升 10 倍，你现有的 CI/CD 流水线和 Code Review 流程还能撑得住吗？你会优先改造哪个环节？</p>
<p><strong>欢迎在评论区分享你的“系统级防御”策略，我们一起交流 AI 时代的工程生存法则！</strong></p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
