<?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 &#187; 开源</title>
	<atom:link href="http://tonybai.com/tag/%e5%bc%80%e6%ba%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Mon, 06 Apr 2026 00:29:15 +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>拒绝 AI 署名！Go 核心团队在 AIGC 时代划下的“工程红线”</title>
		<link>https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship/</link>
		<comments>https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship/#comments</comments>
		<pubDate>Sun, 15 Feb 2026 00:00:22 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AIAssistedProgramming]]></category>
		<category><![CDATA[AIAuthorship]]></category>
		<category><![CDATA[AIGC]]></category>
		<category><![CDATA[AIGeneratedProgramming]]></category>
		<category><![CDATA[AI生成编程]]></category>
		<category><![CDATA[AI署名]]></category>
		<category><![CDATA[AI辅助编程]]></category>
		<category><![CDATA[BrandolinisLaw]]></category>
		<category><![CDATA[CoAuthoredBy]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[ContributorLicenseAgreement]]></category>
		<category><![CDATA[Copyright]]></category>
		<category><![CDATA[EngineeringRedLine]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Gocoreteam]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Go核心团队]]></category>
		<category><![CDATA[Hallucination]]></category>
		<category><![CDATA[IanLanceTaylor]]></category>
		<category><![CDATA[LegalRisk]]></category>
		<category><![CDATA[license]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[ResponsibilityBoundary]]></category>
		<category><![CDATA[ReverseBrandolinisLaw]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[RussCox]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[SpiralOfMediocrity]]></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=5892</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship 大家好，我是Tony Bai。 在生成式 AI 狂飙突进的 2026 年，编程似乎变得前所未有的容易。Claude Code、Gemini Cli、Codex等 已经成为开发者的标配。然而，技术便利的背后，模糊的责任边界正在侵蚀软件工程的根基。 近日，在 Go 语言这个以“简单、可靠、高效”著称的开源圣殿里，核心团队被迫画下了一道红线。 起因是一个特殊的 CL（Change List 741504），提交者在描述中赫然写道：“Co-Authored-By: Claude Opus 4.5 &#110;&#111;&#114;&#101;p&#x6c;&#x79;&#x40;&#x61;&#x6e;&#x74;&#104;&#114;&#111;&#112;&#105;c&#x2e;&#x63;&#x6f;&#x6d;”。这行看似“诚实”的署名，瞬间触动了 Go 语言之父 Rob Pike、Ian Lance Taylor 以及 Russ Cox 等大佬的神经。 这不仅仅是一个关于署名权的争论，这是整个开源世界在 AI 时代必须面对的“立宪时刻”：我们该如何划定人类与 AI 在代码创作中的界限？ 本文将深度复盘这场发生在 Go 核心圈的讨论，并解读 Russ Cox 最终定调背后的深意。 触碰红线——潘多拉魔盒的开启 事情的起因简单而诡异。开发者 John S 提交了一个修复 cgo 文档的 CL，并在描述中注明了 Claude Opus [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/go-core-team-rejects-ai-authorship-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship">本文永久链接</a> &#8211; https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship</p>
<p>大家好，我是Tony Bai。</p>
<p>在生成式 AI 狂飙突进的 2026 年，编程似乎变得前所未有的容易。Claude Code、Gemini Cli、Codex等 已经成为开发者的标配。然而，技术便利的背后，模糊的责任边界正在侵蚀软件工程的根基。</p>
<p>近日，在 Go 语言这个以“简单、可靠、高效”著称的开源圣殿里，核心团队被迫画下了一道<strong>红线</strong>。</p>
<p>起因是一个<a href="https://go-review.googlesource.com/c/go/+/741504">特殊的 CL（Change List 741504）</a>，提交者在描述中赫然写道：“Co-Authored-By: Claude Opus 4.5 <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#110;&#111;&#114;&#101;p&#x6c;&#x79;&#x40;&#x61;&#x6e;&#x74;&#104;&#114;&#111;&#112;&#105;c&#x2e;&#x63;&#x6f;&#x6d;">&#110;&#111;&#114;&#101;p&#x6c;&#x79;&#x40;&#x61;&#x6e;&#x74;&#104;&#114;&#111;&#112;&#105;c&#x2e;&#x63;&#x6f;&#x6d;</a>”。这行看似“诚实”的署名，瞬间触动了 Go 语言之父 Rob Pike、Ian Lance Taylor 以及 Russ Cox 等大佬的神经。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/go-core-team-rejects-ai-authorship-2.png" alt="" /></p>
<p>这不仅仅是一个关于署名权的争论，这是整个开源世界在 AI 时代必须面对的“立宪时刻”：我们该如何划定人类与 AI 在代码创作中的界限？</p>
<p>本文将深度复盘<a href="https://groups.google.com/g/golang-dev/c/4Li4Ovd_ehE/m/8L9s_jq4BAAJ">这场发生在 Go 核心圈的讨论</a>，并解读 Russ Cox 最终定调背后的深意。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<h2>触碰红线——潘多拉魔盒的开启</h2>
<p>事情的起因简单而诡异。开发者 John S 提交了一个修复 cgo 文档的 CL，并在描述中注明了 Claude Opus 4.5 是共同作者。</p>
<p>Ian Lance Taylor（Go 泛型的主要设计者之一）率先发难，敏锐地指出了这行字背后潜藏的两个致命法律风险：</p>
<ol>
<li>版权归属：Anthropic（Claude 的母公司）是否对其模型生成的代码拥有版权？</li>
<li>许可证传染：如果 AI 模型是基于非开源或与 Go 不兼容协议的代码训练的，那么它生成的代码是否会污染 Go 的代码库？</li>
</ol>
<p>Robert Griesemer（Go 创始三巨头之一）则从工程角度表达了担忧：</p>
<blockquote>
<p>“如果代码描述是 AI 写的，我们可以删掉那行字。但如果是 Claude 写的代码，我们就有大麻烦了。”</p>
</blockquote>
<p>Griesemer 的担忧直指 AIGC 的核心痛点：幻觉与平庸。他将 AI 现在的状态比作拼写检查器——它可以修正拼写，但它真的懂“修辞”吗？更重要的是，它懂“正确性”吗？</p>
<p>而 Rob Pike（Go 语言之父）的回复依然是那样简洁有力，且带有强烈的不容置疑：</p>
<blockquote>
<p>“这是一个非常危险的滑坡（slippery slope）。我建议第一步简单点：<strong>说不（NO）。</strong>”</p>
</blockquote>
<p><img src="https://tonybai.com/wp-content/uploads/2026/go-core-team-rejects-ai-authorship-3.png" alt="" /></p>
<p>Rob Pike 意识到，一旦模糊了这条线，开源社区将面临“人的缺位”。谁来维护这些代码？谁来为 Bug 负责？是一个在那一刻运行的概率模型，还是那个按下 Enter 键的人？</p>
<h2>工程哲学——红线之内的质量守卫</h2>
<p>在长达数日的讨论后，Russ Cox (rsc) 发表了一篇极具分量的总结性邮件，在这封邮件中，他代表 Go 核心团队给出了AI 时代Go项目的AI 政策宣示，并说明了划定这条红线的工程学必要性。</p>
<h3>对抗“逆向布兰多里尼定律”</h3>
<p>互联网上有一条著名的“布兰多里尼定律”（Brandolini&#8217;s law）：反驳胡扯所需要的能量，比产生胡扯所需要的能量大一个数量级。</p>
<p>在编程领域，AI 正在制造同样的困境。Russ 指出：</p>
<blockquote>
<p>“AI 工具诱使许多人陷入一种虚假的信念……人们以前所未有的速度生成大量的代码……就像看着会跳舞的大象，虽然令人惊叹，但通常既慢又笨拙，且难以维护。”</p>
</blockquote>
<p>写代码变容易了，但代码审查（Code Review）变难了。</p>
<p>Go 的设计哲学是“代码被阅读的次数远多于被编写的次数”。而 AIGC 工具颠倒了这一关系。AI 可以在几秒钟内生成数百行看似完美、实则包含微妙 Bug 的代码。如果不划定红线，Go 项目将被机器生成的、无人真正理解的代码淹没。</p>
<h3>拒绝“关闭大脑”的提交</h3>
<p>工具的便捷性往往会让人关闭大脑。当 Claude Code 或 Copilot 给出一段代码时，开发者最自然的反应是“它看起来能跑”，然后直接提交。</p>
<p>这种“关闭大脑（Turn off your brain）”的行为，是工程质量的大敌。</p>
<p>Go 团队划定红线的目的，是强迫开发者回归理性：你必须理解你提交的每一行代码。如果连提交者自己都无法解释代码为什么这么写，那么这段代码就是项目的负资产。</p>
<h2>法律博弈——红线之外的版权黑洞</h2>
<p>除了工程哲学，Russ Cox 明确指出，法律风险是划定这条红线的硬性约束。</p>
<h3>“非人类”没有版权</h3>
<p>根据美国版权局（US Copyright Office）的指导意见，非人类创作的作品不受版权法保护。</p>
<p>这意味着，如果一段代码被认定为完全由 AI 生成，它可能直接进入公有领域（Public Domain），或者其版权归属处于薛定谔状态。</p>
<p>Go 项目要求所有贡献者签署 CLA（贡献者许可协议）。CLA 的核心前提是：贡献者拥有其提交代码的版权，并将其授权给 Google/Go 项目。</p>
<p>如果允许 AI 署名：</p>
<ul>
<li>贡献者没有版权，因此签了 CLA 也没用。</li>
<li>Google 无法获得有效的版权授权。</li>
<li>Go 的代码库中将出现版权状态不明的“黑洞”。</li>
</ul>
<h3>训练数据的原罪</h3>
<p>这是 Robert Engels 在讨论中反复强调的点：AI 是在什么数据上训练的？</p>
<p>如果 Gemini 或 Claude 记住了某段 GPL 或 AGPL 协议的代码，并在微调后将其“吐”了出来，而这段代码被合入了使用 BSD 协议的 Go 项目中，这就构成了严重的侵权风险。</p>
<p>作为顶级开源项目，Go 团队必须规避任何潜在的法律诉讼。“拒绝 AI 署名”是法律上的防火墙。</p>
<h2>最终裁决——Go 团队的“三不”原则</h2>
<p>基于上述工程和法律的双重考量，Russ Cox 代表 Go 团队划定了极其清晰的政策红线。这份裁决不仅适用于 Go，也值得所有技术团队参考。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/go-core-team-rejects-ai-authorship-4.png" alt="" /></p>
<h3>不接受 Co-Authored-By: AI</h3>
<p>Go 项目<strong>不接受</strong>任何由 AI 模型作为共同作者的提交。</p>
<p>这不仅在法律上是无稽之谈（AI 没有法律主体资格），在工程责任上也是一种逃避。</p>
<h3>不接受“无人负责”的代码</h3>
<p>提交者必须对代码负全责。</p>
<p>无论你用了什么工具——是 Vim、IDE 的自动补全，还是 Claude Code——当你提交代码时，你就是在声明：“这是我的作品，我理解它，我为它负责。”</p>
<p>Russ Cox 提出了一个极其严苛的标准：</p>
<blockquote>
<p>“如果你用 AI 生成了代码，你必须像审查同事的代码一样，甚至更加严格地审查它。如果你不能自信地声称‘这是我写的’（即便你用了工具），那么就不要提交它。”</p>
</blockquote>
<h3>作者列表只属于人类</h3>
<p>Go 的贡献者列表（AUTHORS 文件）只包含人类。</p>
<p>开源是人类智慧的结晶。AI 只是工具，是像编译器、Linter 一样的高级工具，但工具不能成为作者。</p>
<h2>前瞻——AI 时代的开发者生存指南</h2>
<p>Go 团队划定的这条红线，实际上厘清了 AI 辅助编程（AI-Assisted）与 AI 生成编程（AI-Generated）的本质区别。</p>
<h3>从“编写者”到“验证者”</h3>
<p>在红线之内，开发者的核心竞争力正在发生转移。</p>
<ul>
<li>过去：熟练掌握语法，快速编写代码。</li>
<li>未来：拥有深厚的系统知识，能够<strong>验证</strong> AI 生成代码的正确性、安全性和性能。</li>
</ul>
<p>正如 Russ 所言：“审查代码比编写代码更难。”未来的高级工程师，本质上都是高级 Code Reviewer。</p>
<h3>警惕“平庸的螺旋”</h3>
<p>LLM 的训练基于海量的互联网数据，这意味着它生成的代码往往是“平均水平”的。但 Go 标准库追求的是“极致的工程化”。</p>
<p>如果过度依赖 AI，代码库的质量将不可避免地滑向平庸。这条红线，是为了保护代码库中人类工程师的审美和坚持。</p>
<h2>小结</h2>
<p>2026 年初的这次讨论，为开源社区树立了一块重要的界碑。</p>
<p>面对 AI 的诱惑，Go 团队选择了一条更为艰难、保守，但也更为负责任的道路。他们划定红线，拒绝了“看起来很快”的捷径，坚守了“简单、可维护、人类可理解”的初心。</p>
<p>这条红线告诉我们：AI 是你的副驾驶，但永远不要让它接管方向盘。因为当车毁人亡时，坐牢的永远是你，而不是那个大语言模型。</p>
<p>资料链接：</p>
<ul>
<li>https://groups.google.com/g/golang-dev/c/4Li4Ovd_ehE/m/8L9s_jq4BAAJ</li>
<li>https://go-review.googlesource.com/c/go/+/741504</li>
</ul>
<hr />
<p><strong>你愿意为 AI 代码负全责吗？</strong></p>
<p>Go 团队要求：如果你不能自信地声称“这是我写的”，就不要提交。在你的日常开发中，你会对 AI 生成的代码进行逐行 Review 吗？你认为“不准 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>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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/02/15/go-core-team-rejects-ai-authorship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“退休”大佬的 AI 复出战：为了“好玩”，他写出了火遍全网的 Moltbot</title>
		<link>https://tonybai.com/2026/01/30/clawdbot-author-peter-steinberger-full-interview/</link>
		<comments>https://tonybai.com/2026/01/30/clawdbot-author-peter-steinberger-full-interview/#comments</comments>
		<pubDate>Fri, 30 Jan 2026 00:23:38 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AgenticCommerce]]></category>
		<category><![CDATA[AIAgent]]></category>
		<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[Burnout]]></category>
		<category><![CDATA[ClaudeCode]]></category>
		<category><![CDATA[ClawdBot]]></category>
		<category><![CDATA[CLIFirst]]></category>
		<category><![CDATA[DataLiberation]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[FirstPrinciples]]></category>
		<category><![CDATA[Foundation]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[LocalFirst]]></category>
		<category><![CDATA[MacMini]]></category>
		<category><![CDATA[MacStudio]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Moltbot]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[PersonalDeveloper]]></category>
		<category><![CDATA[PeterSteinberger]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[RPA]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[WalledGardens]]></category>
		<category><![CDATA[WhatsApp]]></category>
		<category><![CDATA[whisper]]></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=5792</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/mm/dd/clawdbot-author-peter-steinberger-full-interview 大家好，我是Tony Bai。 在硅谷，每天都有无数个 AI 项目诞生，它们大多有着精美的 Landing Page，有着宏大的融资计划，PPT 里写满了“颠覆行业”。 但最近，一个名为 Clawdbot（现已因商标原因更名为 Moltbot）的项目，却以一种完全不同的姿态闯入了大众视野。没有融资，没有团队，甚至没有商业计划书。它仅仅是一个“退休(财务自由)”的软件大佬，为了给自己“找乐子”而写的一堆代码。 然而，就是这样一个项目，在 GitHub 上一夜之间狂揽 3.2w+ Star，甚至让很多非技术圈的人都跑去 Apple Store 抢购 Mac Mini 来运行它。 它的作者是 Peter Steinberger，著名的 PDF SDK 提供商 PSPDFKit 的创始人。在卖掉公司退休四年后，他因为 AI 找回了当年的热血。 在最近的一次深度访谈中，Peter 毫无保留地分享了他开发 Moltbot 的全过程。这不仅是一个关于工具的故事，更是一份关于“在 AI 时代，个人开发者如何打破大厂垄断，重塑人机交互”的珍贵启示录。 从 Burnout 到 Addiction：找回失去的 Mojo 故事的开始并不美好。 四年前，Peter 卖掉了自己经营了 13 年的公司。长期的创业压力让他彻底 Burnout（职业倦怠）。 “那感觉就像有人把我的 Mojo（魔力/精力）吸干了一样。” 他回忆道。在那之后的三年里，他对编程完全提不起兴趣，哪怕只是坐在电脑前都觉得是一种折磨。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/clawdbot-author-peter-steinberger-full-interview-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/30/clawdbot-author-peter-steinberger-full-interview">本文永久链接</a> &#8211; https://tonybai.com/2026/mm/dd/clawdbot-author-peter-steinberger-full-interview</p>
<p>大家好，我是Tony Bai。</p>
<p>在硅谷，每天都有无数个 AI 项目诞生，它们大多有着精美的 Landing Page，有着宏大的融资计划，PPT 里写满了“颠覆行业”。</p>
<p>但最近，一个名为 <strong>Clawdbot</strong>（现已因商标原因更名为 <strong>Moltbot</strong>）的项目，却以一种完全不同的姿态闯入了大众视野。没有融资，没有团队，甚至没有商业计划书。它仅仅是一个“退休(财务自由)”的软件大佬，为了给自己“找乐子”而写的一堆代码。</p>
<p>然而，就是这样一个项目，在 GitHub 上一夜之间狂揽 <strong>3.2w+ Star</strong>，甚至让很多非技术圈的人都跑去 Apple Store 抢购 Mac Mini 来运行它。</p>
<p>它的作者是 <strong>Peter Steinberger</strong>，著名的 PDF SDK 提供商 PSPDFKit 的创始人。在卖掉公司退休四年后，他因为 AI 找回了当年的热血。</p>
<p>在最近的<a href="https://www.youtube.com/watch?v=qyjTpzIAEkA">一次深度访谈</a>中，Peter 毫无保留地分享了他开发 Moltbot 的全过程。这不仅是一个关于工具的故事，更是一份关于<strong>“在 AI 时代，个人开发者如何打破大厂垄断，重塑人机交互”</strong>的珍贵启示录。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<h2>从 Burnout 到 Addiction：找回失去的 Mojo</h2>
<p>故事的开始并不美好。</p>
<p>四年前，Peter 卖掉了自己经营了 13 年的公司。长期的创业压力让他彻底 <strong>Burnout（职业倦怠）</strong>。</p>
<p>“那感觉就像有人把我的 Mojo（魔力/精力）吸干了一样。” 他回忆道。在那之后的三年里，他对编程完全提不起兴趣，哪怕只是坐在电脑前都觉得是一种折磨。</p>
<p>直到 2025 年 4 月，一切改变了。</p>
<p>Peter 开始接触早期的 AI 工具，特别是 Claude Code 的 Beta 版。那一刻，他感到了久违的兴奋。</p>
<p>“如果你错过了前几年 AI 比较‘智障’的阶段，直接上手现在的工具，你会觉得——<strong>这简直太棒了（Pretty Awesome）！</strong>”</p>
<p>这种兴奋迅速转化为了一种“成瘾（Addiction）”。</p>
<p>但这是一种积极的成瘾。他开始熬夜写代码，甚至会在凌晨 4 点给朋友发消息讨论 AI 的新发现。为了给自己找点乐子，他甚至搞了一些极其荒谬的实验：</p>
<p>比如，他做了一个<strong>“全球最贵的闹钟”</strong>。</p>
<p>他让运行在伦敦服务器上的 AI Agent，通过 SSH 远程登录到他家里的 MacBook，然后自动调大音量来叫醒他。</p>
<p>“这听起来很疯狂，甚至有点杀鸡用牛刀，但这就是我的初衷——<strong>Have Fun（玩得开心）</strong>。”</p>
<p>Peter 认为，学习新技术的最好方式，就是把它当成玩具。当你不再为了 KPI 或融资而写代码，而是为了让 AI 帮你订一份外卖、回一条消息而折腾时，创造力才会真正涌现。</p>
<h2>技术哲学：CLI 是 Agent 的母语</h2>
<p>Moltbot 之所以能打败众多商业化的 AI 助理，核心在于 Peter 对软件架构有着极其深刻的第一性原理认知：</p>
<p><strong>“Don&#8217;t build for humans, build for models.”（别为人构建，为模型构建。）</strong></p>
<p>如果你仔细观察现在的软件世界，你会发现所有的 GUI（图形界面）、按钮、下拉菜单，本质上都是为了适应人类极其有限的带宽（Bandwidth）和注意力而设计的。我们需要视觉引导，因为我们记不住命令。</p>
<p>但 AI 不需要这些。</p>
<p>AI 读得懂 Unix 手册，AI 记得住所有参数。</p>
<p>因此，Moltbot 采用了极其激进的 <strong>CLI-First（命令行优先）</strong> 策略。</p>
<p>Peter 解释道：“你知道什么东西最能 Scale（扩展）吗？是 CLI。你可以写 1000 个小工具，只要它们都有 &#8211;help 文档，Agent 就能瞬间学会如何使用它们。”</p>
<p>在 Moltbot 的架构里，所有的能力都被封装成了原子化的 CLI 工具：</p>
<ul>
<li>想控制 Sonos 音箱？写个 CLI。</li>
<li>想看家里的摄像头？写个 CLI。</li>
<li>想查 Google 地图？写个 CLI。</li>
</ul>
<p>Agent 就像一个万能的系统管理员，它通过组合这些 CLI，获得了在数字世界和物理世界中“行动”的能力。这比那些试图用鼠标点击模拟人类操作的 RPA（自动化流程）要高效、稳定一万倍。</p>
<h2>打破围墙：数据的解放运动</h2>
<p>Moltbot 最让极客们热血沸腾的，是它对 <strong>Big Tech Walled Gardens（大厂围墙花园）</strong> 的宣战。</p>
<p>现在的互联网巨头，都希望把你锁在他们的 App 里。WhatsApp 不开放 API，Spotify 不让你导出数据，外卖软件不让你自动化下单。</p>
<p>但在 Peter 看来，<strong>AI 是打破这些围墙的终极武器。</strong></p>
<p>以 WhatsApp 为例。官方没有给个人开发者提供 API，如果你用商业 API 发太多消息，还会被封号。</p>
<p>Peter 的做法是：<strong>Hack Everything。</strong></p>
<p>他直接通过 Hack 桌面端协议，让 Moltbot 能够接管他的 WhatsApp。当他在旅途中收到朋友的语音消息（比如推荐餐厅）时，Moltbot 会自动：</p>
<ol>
<li>下载语音文件（哪怕它是 Opus 格式）。</li>
<li>调用 ffmpeg 转码。</li>
<li>调用 Whisper 识别文字。</li>
<li>调用 OpenAI 提取餐厅名字和地址。</li>
<li>自动添加到他的 Google Maps 待去清单中。</li>
</ol>
<p>这一切都在后台静默发生。当 Peter 打开地图时，餐厅已经在那了。</p>
<p><strong>“App 终将消亡（Melt away）。”</strong> Peter 在访谈中抛出了这个震聋发聩的观点。</p>
<p>“为什么我还需要一个专门的 Fitness Pal 来记录卡路里？我只需要拍一张汉堡的照片发给我的 Agent。它知道我在麦当劳，它知道汉堡的热量，它会自动更新我的健康数据库，并建议我晚上多跑 2 公里。”</p>
<p>在 <a href="https://tonybai.com/2026/01/14/google-ucp-agentic-commerce-architecture-revolution">Agentic Commerce 时代</a>，用户不再需要在一个个孤立的 App 之间跳来跳去。<strong>所有的 App 都将退化为 Agent 可调用的 API（或被 Hack 成 API）。</strong></p>
<h2>本地优先：隐私与红利的博弈</h2>
<p>Moltbot 的另一个标签是 <strong>Local-first（本地优先）</strong>。</p>
<p>虽然 Peter 自己也用 OpenAI 和 Anthropic 的模型（因为它们目前确实最聪明），但他花了大量精力去适配本地模型（如 MiniMax 2.1）。</p>
<p>为此，他甚至给自己的 Mac Studio 拉满了 512GB 的内存。</p>
<p>为什么要这么折腾？</p>
<p>除了“好玩”，还有一个现实的考量：<strong>Red Tape（繁文缛节）</strong>。</p>
<p>“如果你是一个公司，你想让 AI 访问你的 Gmail，你需要经过极其漫长的合规审核，甚至需要收购一家有牌照的公司。这太荒谬了。”</p>
<p>但如果你在<strong>本地</strong>运行 Agent，这一切都不复存在。</p>
<ul>
<li>数据在你的硬盘里。</li>
<li>模型在你的显卡里。</li>
<li>操作在你的系统里。</li>
</ul>
<p>没有人能阻止你读取自己的邮件，没有人能禁止你分析自己的聊天记录。</p>
<p>Peter 甚至预言，AI Agent 的普及将直接带动高性能硬件（如 Mac Mini）的销量。<strong>“This is the liberation of data.（这是数据的解放。）”</strong></p>
<h2>商业与开源：为爱发电，拒绝收编</h2>
<p>随着 Moltbot 的爆火，无数 VC 挥舞着支票找上门，甚至有大厂想直接收购整个项目（或者招安 Peter）。</p>
<p>对此，Peter 的态度非常潇洒：<strong>“I built this for me.（我是为我自己造的。）”</strong></p>
<p>他已经财务自由，不需要再为了融资去写 PPT，不需要为了增长去牺牲用户体验。</p>
<p>“代码本身已经不值钱了（Code is not worth that much anymore）。在这个 AI 时代，你完全可以把我的代码删了，让 AI 几个月再写一个新的。”</p>
<p>真正值钱的，是<strong>Idea（想法）</strong>，是<strong>Community（社区）</strong>，是<strong>Brand（品牌）</strong>。</p>
<p>他更倾向于将 Moltbot 运作成为一个非营利基金会（Foundation）。他希望这成为一个属于所有人的、开放的、可 hack 的游乐场，而不是某个大厂封闭生态的一部分。</p>
<h2>小结：去构建你的 Loop</h2>
<p>在访谈的最后，Peter 对所有开发者发出了呼吁：</p>
<p><strong>“Don&#8217;t just watch. Build your own agentic loop.”</strong><br />
（别只是看，去构建你自己的智能体闭环。）</p>
<p>Moltbot 只是一个开始。它证明了，一个拥有<strong>长期记忆（Memory）</strong>、<strong>工具使用能力（Tools）</strong>和<strong>自主性（Autonomy）</strong>的个人 Agent，能爆发多么惊人的能量。</p>
<p>在这个时代，限制你的不再是技术门槛，而是你的<strong>想象力</strong>。</p>
<p>去写几个 CLI，去 Hack 几个 API，去给你的 AI 装上“手脚”和“记忆”。</p>
<p>未来，属于那些敢于用 AI 重塑生活的人！</p>
<p>资料链接：https://www.youtube.com/watch?v=qyjTpzIAEkA</p>
<hr />
<p><strong>你的“好玩”项目</strong></p>
<p>Peter 的故事告诉我们，技术最原本的动力是乐趣。如果给你无限的时间和算力，你最想用 AI 为自己做一个什么“好玩”的工具？是全自动点餐助<br />
手，还是你的专属游戏陪练？</p>
<p>欢迎在评论区分享你的脑洞！别管它有没有商业价值，有趣就够了。</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>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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/01/30/clawdbot-author-peter-steinberger-full-interview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>20 年 Java 老店的“背叛”：WSO2 为何高呼“Goodbye Java, Hello Go”？</title>
		<link>https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift/</link>
		<comments>https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift/#comments</comments>
		<pubDate>Wed, 28 Jan 2026 23:15:10 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AOT]]></category>
		<category><![CDATA[APIManagement]]></category>
		<category><![CDATA[API管理]]></category>
		<category><![CDATA[ArchitectureShift]]></category>
		<category><![CDATA[BackendDevelopment]]></category>
		<category><![CDATA[Ballerina]]></category>
		<category><![CDATA[BFF]]></category>
		<category><![CDATA[cloudnative]]></category>
		<category><![CDATA[CNCF]]></category>
		<category><![CDATA[ConcurrencyPrimitives]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[GarbageCollection]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[GraalVM]]></category>
		<category><![CDATA[IdentityAuthentication]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JIT]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[MemoryBloat]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[middleware]]></category>
		<category><![CDATA[OpenChoreo]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[ProjectLoom]]></category>
		<category><![CDATA[serverless]]></category>
		<category><![CDATA[SoftwareServer]]></category>
		<category><![CDATA[StartupSpeed]]></category>
		<category><![CDATA[StaticBinary]]></category>
		<category><![CDATA[VirtualThreads]]></category>
		<category><![CDATA[WSO2]]></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=5785</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift 大家好，我是Tony Bai。 “当我们 2005 年创办 WSO2 时，开发服务端企业级基础设施的正确语言毫无疑问是：Java。然而，当我们走过第 20 个年头并展望未来时，情况已经变了。” 近日，全球知名的开源中间件厂商 WSO2 发布了一篇震动技术圈的博文——《Goodbye Java, Hello Go!》。 这是企业级软件在云原生时代技术风向标的一次重要偏转。作为 Java 时代的既得利益者，WSO2 曾在 API 管理、集成中间件领域构建了庞大的 Java 帝国。为何在今天，他们会做出如此激进的转向？Java 真的不适合未来了吗？Go 到底赢在哪里？ 让我们深入剖析这背后的技术逻辑、架构变迁与社区的激烈争议。 时代的变迁——从“服务器”到“函数” WSO2 的转向并非一时冲动，而是基于对过去 15 年基础设施软件形态深刻变化的洞察。其博文中极其精准地总结了这一变迁： “服务器”概念的消亡 在 2010 年代之前，中间件是以独立“服务器”（Server）的形式交付的。 应用服务器 (App Servers)：如 WebLogic, WebSphere, Tomcat。 企业服务总线 (ESB)：集成了各种协议适配器的庞然大物。 业务流程服务器 (Process Servers)：管理长周期的业务状态。 那是一个“重量级”的时代。你部署一个服务器，然后把你的业务逻辑（WAR 包、JAR 包）扔进去运行。这正是 Java 和 JVM [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/wso2-goodbye-java-hello-go-tech-stack-shift-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift">本文永久链接</a> &#8211; https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift</p>
<p>大家好，我是Tony Bai。</p>
<p>“当我们 2005 年创办 WSO2 时，开发服务端企业级基础设施的正确语言毫无疑问是：Java。然而，当我们走过第 20 个年头并展望未来时，情况已经变了。”</p>
<p>近日，全球知名的开源中间件厂商 WSO2 发布了一篇震动技术圈的博文——《<a href="https://wso2.com/library/blogs/goodbye-java-hello-go">Goodbye Java, Hello Go!</a>》。</p>
<p>这是企业级软件在云原生时代技术风向标的一次重要偏转。作为 Java 时代的既得利益者，WSO2 曾在 API 管理、集成中间件领域构建了庞大的 Java 帝国。为何在今天，他们会做出如此激进的转向？Java 真的不适合未来了吗？Go 到底赢在哪里？</p>
<p>让我们深入剖析这背后的技术逻辑、架构变迁与<a href="https://www.reddit.com/r/golang/comments/1qomr6g/goodbye_java_hello_go/">社区的激烈争议</a>。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/distributed-system-guide-qr.png" alt="" /></p>
<h2>时代的变迁——从“服务器”到“函数”</h2>
<p>WSO2 的转向并非一时冲动，而是基于对过去 15 年基础设施软件形态深刻变化的洞察。其博文中极其精准地总结了这一变迁：</p>
<h3>“服务器”概念的消亡</h3>
<p>在 2010 年代之前，中间件是以独立“服务器”（Server）的形式交付的。</p>
<ul>
<li>应用服务器 (App Servers)：如 WebLogic, WebSphere, Tomcat。</li>
<li>企业服务总线 (ESB)：集成了各种协议适配器的庞然大物。</li>
<li>业务流程服务器 (Process Servers)：管理长周期的业务状态。</li>
</ul>
<p>那是一个“重量级”的时代。你部署一个服务器，然后把你的业务逻辑（WAR 包、JAR 包）扔进去运行。这正是 Java 和 JVM 的黄金时代——JVM 作为一个强大的运行时环境，提供了热加载、动态管理、JIT 优化等一系列高级功能，完美匹配了这种“长时间运行、多应用共享”的服务器模式。</p>
<p>然而，容器化时代终结了这一切。</p>
<p>现在的“服务器”不再是一个独立的实体，而变成了一个<strong>库 (Library)</strong>。</p>
<ul>
<li>你的业务逻辑不再是“寄生”在服务器里，而是包含了服务器。</li>
<li>整个应用打包成一个 Docker 镜像，作为一个独立的进程运行。</li>
<li>任务完成后，容器销毁，进程结束。</li>
</ul>
<p>在 WSO2 看来，“独立软件服务器的时代已经结束了”。这对于 Java 来说，是一个底层逻辑的打击。</p>
<h3>生命周期：从“月”到“毫秒”</h3>
<p>在过去，一个服务器启动慢点没关系，因为它一旦启动，可能会运行数月甚至数年。JVM 的 JIT（即时编译）机制通过预热来换取长期运行的高性能，这是一种非常合理的权衡。</p>
<p>但在 Kubernetes 和 Serverless 主导的今天，服务器变得极度短暂 (Ephemeral)。</p>
<ul>
<li>容器根据负载自动扩缩容，新实例必须瞬间就绪。</li>
<li>Serverless 函数可能只存活几秒钟。</li>
</ul>
<p>在这种场景下，启动时间就是服务质量 (SLA)。</p>
<p>WSO2 指出：“容器应该在毫秒级内准备好起舞，而不是秒级。” Java 庞大的生态依赖（Spring 初始化、类加载、注解扫描）和 JVM 的启动开销，在云原生环境下显得格格不入。内存膨胀（Memory Bloat）也直接推高了云厂商的账单。</p>
<h3>生态位的错位：修补 vs. 原生</h3>
<p>面对挑战，Java 社区并非无动于衷。<strong>GraalVM Native Image</strong> 试图通过 AOT（提前编译）解决启动速度问题；<strong>Project Loom</strong> 试图通过虚拟线程解决并发资源消耗问题。</p>
<p>但在 WSO2 的架构师们看来，这些努力更像是一种<strong>“追赶式的修补”</strong>。</p>
<blockquote>
<p>“这些解决方案感觉就像是在为一个不同时代设计的语言和运行时进行翻新。”</p>
</blockquote>
<p>GraalVM 虽然强大，但带来了构建时间的剧增、反射的限制以及调试的复杂性。相比之下，Go 语言在设计之初就<strong>原生 (Native)</strong> 地考虑了这些问题：编译即二进制，启动即巅峰，并发即协程。这是一种“原生契合”与“后天适配”的本质区别。</p>
<h2>WSO2 的架构重构——前端不动，后端大换血</h2>
<p>WSO2 并没有盲目地全盘推翻，他们对企业级软件的三层架构（前端、中间层、后端）进行了冷静的评估：</p>
<h3>前端 (Frontend)：维持现状</h3>
<ul>
<li><strong>现状</strong>：Web (JS/TS), iOS (Swift/Flutter), Android (Kotlin/Java)。</li>
<li><strong>未来</strong>：<strong>No Change</strong>。</li>
<li><strong>理由</strong>：前端技术栈受限于终端设备（浏览器、手机 OS），且更新换代极快（“fad-driven”，时尚驱动）。目前没有改变的必要。</li>
</ul>
<h3>中间层 (Middle Tier)：Ballerina 的独角戏</h3>
<ul>
<li><strong>现状</strong>：Java, Ballerina。</li>
<li><strong>未来</strong>：<strong>Ballerina</strong>。</li>
<li><strong>核心逻辑</strong>：这一层通常被称为 BFF (Backend for Frontend)，负责 API 聚合、编排。WSO2 自研的 <strong>Ballerina</strong> 语言正是为此而生，它将网络原语（Network Primitives）作为语言的一等公民，极其适合做集成工作。</li>
</ul>
<h3>后端 (Backend)：Go 与 Python 的双雄会</h3>
<ul>
<li><strong>现状</strong>：Java, Go, NodeJS, Python。</li>
<li><strong>未来</strong>：<strong>Go, Python</strong>。</li>
<li><strong>核心逻辑</strong>：这是基础设施逻辑的核心。Python 将继续统治 AI/ML 领域，而 Go 将彻底接管原本属于 Java 的领地，成为构建高性能、高并发基础设施的首选。</li>
</ul>
<h2>为什么是 Go，而不是 Rust？</h2>
<p>这是一个每个技术决策者都会面临的灵魂拷问：既然要追求性能和原生编译，为什么不选 Rust？它不是更快、更安全吗？</p>
<p>WSO2 的回答展现了极高的工程务实精神。他们确实评估了 Rust，但最终选择了 Go。理由如下：</p>
<h3>抽象层级的匹配</h3>
<ul>
<li><strong>Rust 的战场</strong>：操作系统内核、浏览器引擎、嵌入式设备。这些场景需要对内存布局、生命周期做极致的微操，且进程几乎永不重启。</li>
<li><strong>Go 的战场</strong>：中间件、API 网关、编排系统。</li>
</ul>
<p>WSO2 构建的是<strong>中间件基础设施</strong>（如 API Gateway, Identity Server）。在这个层级，“我们总是比裸金属 (Bare Metal) 高那么一点点”。Go 提供的自动垃圾回收 (GC) 和高效的并发原语，恰好处于这个“甜点”位置。</p>
<h3>避免“过度杀伤” (Overkill)</h3>
<p>Rust 的所有权模型 (Ownership) 和借用检查器 (Borrow Checker) 虽然保证了内存安全，但也带来了极高的学习曲线和开发摩擦。对于大多数企业级业务逻辑来说，Rust 提供的控制力是多余的，而为此付出的开发效率代价是昂贵的。</p>
<h3>云原生生态的引力</h3>
<p>这是一个无法忽视的因素。Go 是云原生的“普通话”。</p>
<p>Kubernetes、Docker、Prometheus、etcd、Terraform…… 几乎所有现代基础设施的基石都是用 Go 构建的。选择 Go，意味着：</p>
<ul>
<li><strong>库的复用</strong>：可以直接调用 K8s 的库，而不是通过 API。</li>
<li><strong>人才的复用</strong>：DevOps 工程师和 SRE 通常都懂 Go，可以无缝参与开发。</li>
<li><strong>社区的共鸣</strong>：更容易融入 CNCF 生态，获得社区贡献。</li>
</ul>
<h2>实战验证——WSO2 的 Go 之旅</h2>
<p>WSO2 并非纸上谈兵，他们在过去十年中已经在多个关键项目中验证了 Go 的能力：</p>
<h3>OpenChoreo (CNCF Sandbox Project)</h3>
<p>这是 WSO2 最具野心的项目之一，一个面向 Kubernetes 的开发者平台（IDP）。</p>
<ul>
<li><strong>挑战</strong>：需要深度集成 K8s，处理复杂的 GitOps 流程，且自身必须轻量、快速。</li>
<li><strong>Go 的价值</strong>：作为 K8s 原生语言，Go 让 OpenChoreo 能够像原生组件一样运行在集群中，资源占用极低。</li>
</ul>
<h3>Ballerina 编译器的彻底重写</h3>
<p>这是一个惊人的决定。Ballerina 语言最初是基于 Java 实现的（运行在 JVM 上）。现在，WSO2 正在用 Go 完全重写 Ballerina 编译器。</p>
<ul>
<li><strong>目标</strong>：摆脱 JVM 的束缚，实现瞬间启动。</li>
<li><strong>新架构</strong>：前端编译器用 Go 编写，直接生成基于 Go 的中间表示 (BIR)，这让 CLI 工具的体验得到了质的飞跃。</li>
</ul>
<h3>Thunder：下一代身份认证平台</h3>
<p>身份认证（IAM）通常处于请求链路的关键路径上，对延迟极其敏感。Thunder 利用 Go 的高并发处理能力，实现了在高负载下的低延迟认证，且在容器化环境中具备极快的冷启动能力。</p>
<h2>社区激辩——理性的探讨与情绪的宣泄</h2>
<p>这篇博文在 Reddit 的 r/golang 板块引发了数百条评论的激烈讨论。这不仅仅是语言之争，更是两种工程文化的碰撞。</p>
<h3>反方阵营：Java 依然是王者</h3>
<ol>
<li>
<p><strong>“这是管理层的愚蠢决定”</strong>：<br />
一位愤怒的网友评论道：“计算资源是廉价的，开发人员的时间才是昂贵的。” 他认为，虽然 Go 节省了内存，但在业务逻辑极其复杂的企业级应用中，Java 强大的 IDE 支持、成熟的设计模式和庞大的生态库能显著降低开发成本。强行切换到 Go，可能会导致开发效率的崩塌。</p>
</li>
<li>
<p><strong>“Java 并没有停滞不前”</strong>：<br />
很多 Java 支持者指出，WSO2 对 Java 的印象似乎还停留在 Java 8 时代。现代 Java (21+) 引入了 <strong>Virtual Threads (Project Loom)</strong>，在并发模型上已经可以与 Go 的 Goroutine 媲美；而 <strong>GraalVM</strong> 的成熟也让 Java 能够编译成原生镜像，启动速度不再是短板。</p>
</li>
<li>
<p><strong>“生态位的不可替代性”</strong>：<br />
在处理遗留系统（如 SOAP, XML, 复杂的事务处理）方面，Java 积累了 20 年的库是 Go 无法比拟的。用 Go 去重写这些复杂的业务逻辑，无异于“重新发明轮子”，且容易引入新的 Bug。</p>
</li>
</ol>
<h3>正方阵营：Go 是未来的选择</h3>
<ol>
<li>
<p><strong>“运维友好才是真的友好”</strong>：<br />
一位 DevOps 工程师反驳道：“在微服务架构下，运维成本是巨大的。” Go 生成的静态二进制文件（Static Binary）是运维的梦想——没有依赖地狱，没有 JVM 版本冲突，所有东西都打包在一个几 MB 的文件里。这种部署的便捷性，是 Java 永远无法达到的。</p>
</li>
<li>
<p><strong>“简洁是一种防御机制”</strong>：<br />
Java 项目容易陷入“过度设计”的泥潭——层层叠叠的抽象、复杂的继承关系、魔法般的注解。Go 的强制简洁性（没有继承、显式错误处理）虽然写起来啰嗦，但读起来轻松。在人员流动频繁的大型团队中，Go 代码的可维护性往往优于 Java。</p>
</li>
<li>
<p><strong>“云原生的网络效应”</strong>：<br />
正如 WSO2 所言，如果你在写 K8s Controller，如果你在写 Sidecar，如果你在写网关，Go 就是默认语言。这不仅仅是语言特性的问题，这是生态引力的问题。逆流而上使用 Java 编写这些组件，会让你失去整个社区的支持。</p>
</li>
</ol>
<h2>小结：没有终极语言，只有最适合的工具</h2>
<p>WSO2 的声明并非要“杀死” Java。他们明确表示，现有的 Java 产品线将继续得到长期支持。但在新一代的云原生基础设施平台上，他们坚定地选择了 Go。</p>
<p>这一选择揭示了软件行业的一个趋势：通用编程语言的时代似乎正在结束，“领域专用语言”的时代正在到来。</p>
<ul>
<li>做前端？选 TS/JS。</li>
<li>做 AI 模型训练？选 Python。</li>
<li>做操作系统、浏览器或者嵌入式系统？选 C/Rust/C++。</li>
<li>做企业级业务逻辑（尤其是遗留系统）？Java 依然稳健。</li>
<li>做云原生基础设施、中间件、高并发服务？Go 是当之无愧的王者。</li>
</ul>
<p>对于 Gopher 而言，WSO2 的转型是一个强有力的信号：你们选对了赛道。Go 不仅是 Google 的语言，它正在成为定义未来十年企业级基础设施的通用语。</p>
<p>资料链接：</p>
<ul>
<li>https://wso2.com/library/blogs/goodbye-java-hello-go</li>
<li>https://www.reddit.com/r/golang/comments/1qomr6g/goodbye_java_hello_go/</li>
</ul>
<hr />
<p><strong>你的技术栈“保卫战”</strong></p>
<p>WSO2 的转身，是时代的缩影，也是个体的写照。在你的团队中，是否也发生过类似的“去 Java 化”或“拥抱 Go”的讨论？你认为在云原生时代，Java 还能守住它的江山吗？</p>
<p>欢迎在评论区分享你的观点或经历，无论是坚守者还是转型者，我们都想听听你的声音！</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>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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/01/29/wso2-goodbye-java-hello-go-tech-stack-shift/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kelsey Hightower 退休后的冷思考：为什么 10 年过去了，我们还在谈论容器？</title>
		<link>https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age/</link>
		<comments>https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age/#comments</comments>
		<pubDate>Thu, 22 Jan 2026 00:23:51 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[apple/container]]></category>
		<category><![CDATA[ChasingHype]]></category>
		<category><![CDATA[cloudnative]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[Context]]></category>
		<category><![CDATA[Craftsmanship]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[FinishingWork]]></category>
		<category><![CDATA[FreeBSDServiceJails]]></category>
		<category><![CDATA[InvisibleTechnology]]></category>
		<category><![CDATA[KelseyHightower]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[LargeLanguageModel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[MichaelCrosby]]></category>
		<category><![CDATA[NativeIntegration]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[PromptEngineer]]></category>
		<category><![CDATA[Standardization]]></category>
		<category><![CDATA[TsunamiCycle]]></category>
		<category><![CDATA[Unix]]></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=5760</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age 大家好，我是Tony Bai。 “如果你在 2014 年告诉我，十年后我们还在讨论容器，我会觉得你疯了。但现在是 2025 年，我们依然在这里，谈论着同一个话题。” 在去年中旬举行的 ContainerDays Hamburg 2025 上，早已宣布“退休”的云原生传奇人物 Kelsey Hightower 发表了一场发人深省的主题演讲。在这个 AI 狂热席卷全球的时刻，他没有随波逐流地去谈论大模型，而是回过头来，向所有技术人抛出了一个灵魂拷问： 为什么我们总是在追逐下一个热点，却从来没有真正完成过手头的工作？ 烂尾工程的诅咒——技术圈的“海啸”循环 Kelsey 首先回顾了他职业生涯中经历的三次技术浪潮：Linux 取代 Unix(AIX、Solaris等)、DevOps 的兴起、以及 Docker/Kubernetes 的容器革命。 他敏锐地指出，技术圈似乎陷入了一个无休止的“海啸循环”： 热点爆发：一个新的技术（如 Docker）出现，VC 资金涌入，所有人都在谈论它。 疯狂追逐：为了抢占市场，大家都只做“足够发布”的工作，追求速度而非完美。 未竟而散：还没等这项技术真正成熟、稳定、标准化，下一个热点（如 AI）就来了。于是，半数工程师跳船去追新热点，留下一地鸡毛。 “我们就像一群踢足球的孩子，看到球滚到哪里，所有人就一窝蜂地冲过去，连守门员都离开了球门。结果是，球门大开，后方空虚。” 这就是为什么 10 年过去了，我们还在谈论容器。因为我们当年并没有真正“完成”它。我们留下了无数的复杂性、不兼容和“企业级发行版”，却忘了初衷。 Apple 的“非性感”工作——这才是未来 在演讲中，Kelsey 分享了他最近的一个惊人发现：Apple 正在 macOS 中原生集成容器运行时。 这不是 Docker Desktop，也不是虚拟机套娃，而是操作系统级别的原生支持。这就是 GitHub 上的一个名为 apple/container 的 Apple [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/why-are-we-still-talking-about-containers-in-ai-age-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age">本文永久链接</a> &#8211; https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age</p>
<p>大家好，我是Tony Bai。</p>
<p>“如果你在 2014 年告诉我，十年后我们还在讨论容器，我会觉得你疯了。但现在是 2025 年，我们依然在这里，谈论着同一个话题。”</p>
<p>在去年中旬举行的 ContainerDays Hamburg 2025 上，早已宣布“退休”的云原生传奇人物 <strong>Kelsey Hightower</strong> 发表了<a href="https://www.youtube.com/watch?v=x1t2GPChhX8">一场发人深省的主题演讲</a>。在这个 AI 狂热席卷全球的时刻，他没有随波逐流地去谈论大模型，而是回过头来，向所有技术人抛出了一个灵魂拷问：</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/why-are-we-still-talking-about-containers-in-ai-age-2.png" alt="" /></p>
<p><strong>为什么我们总是在追逐下一个热点，却从来没有真正完成过手头的工作？</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/distributed-system-guide-qr.png" alt="" /></p>
<h2>烂尾工程的诅咒——技术圈的“海啸”循环</h2>
<p>Kelsey 首先回顾了他职业生涯中经历的三次技术浪潮：Linux 取代 Unix(AIX、Solaris等)、DevOps 的兴起、以及 Docker/Kubernetes 的容器革命。</p>
<p>他敏锐地指出，技术圈似乎陷入了一个无休止的“海啸循环”：</p>
<ol>
<li><strong>热点爆发</strong>：一个新的技术（如 Docker）出现，VC 资金涌入，所有人都在谈论它。</li>
<li><strong>疯狂追逐</strong>：为了抢占市场，大家都只做“足够发布”的工作，追求速度而非完美。</li>
<li><strong>未竟而散</strong>：还没等这项技术真正成熟、稳定、标准化，下一个热点（如 AI）就来了。于是，半数工程师跳船去追新热点，留下一地鸡毛。</li>
</ol>
<blockquote>
<p>“我们就像一群踢足球的孩子，看到球滚到哪里，所有人就一窝蜂地冲过去，连守门员都离开了球门。结果是，球门大开，后方空虚。”</p>
</blockquote>
<p>这就是为什么 10 年过去了，我们还在谈论容器。因为我们当年并没有真正“完成”它。我们留下了无数的复杂性、不兼容和“企业级发行版”，却忘了初衷。</p>
<h2>Apple 的“非性感”工作——这才是未来</h2>
<p>在演讲中，Kelsey 分享了他最近的一个惊人发现：<strong>Apple 正在 macOS 中原生集成容器运行时。</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/why-are-we-still-talking-about-containers-in-ai-age-3.png" alt="" /></p>
<p>这不是 Docker Desktop，也不是虚拟机套娃，而是操作系统级别的原生支持。这就是 GitHub 上的一个名为 <strong>apple/container</strong> 的 Apple 开源项目：</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/why-are-we-still-talking-about-containers-in-ai-age-4.png" alt="" /></p>
<p>Kelsey 提到 contributors 中有 Docker 元老 Michael Crosby ，Michael Crosby 正在 Apple 做着这件“不性感”但极其重要的事情。</p>
<p>Kelsey 认为，这才是容器技术的<strong>终局</strong>：</p>
<ul>
<li><strong>标准化</strong>：容器运行时将成为像 TCP/IP 协议栈一样的操作系统标配，无论你是 Linux、macOS 还是 Windows。</li>
<li><strong>隐形化</strong>：你不再需要安装 Docker，不再需要关心运行时。它就在那里，像水和电一样自然。</li>
<li><strong>应用商店的重构</strong>：未来，App Store 分发的可能就是容器镜像，彻底解决依赖冲突和安全沙箱问题。</li>
</ul>
<p>这正是那些没有去追逐 AI 热点，而是选择留在“球门”前的人，正在默默完成的伟大工程。</p>
<h2>关于 AI——不要做“盲目的复制者”</h2>
<p>作为 Google 前员工，Kelsey 对 AI 并不陌生。但他对当前的 LLM 热潮保持着清醒的警惕。</p>
<p>他现场演示了一个有趣的实验：询问一个本地运行的 LLM “FreeBSD Service Jails 需要什么版本？”<br />
*   <strong>AI 的回答</strong>：FreeBSD 13（一本正经的胡说八道）。<br />
*   <strong>真相</strong>：FreeBSD 15（尚未发布）。</p>
<p>Kelsey 指出，现在的 AI 就像一个热心但糊涂的路人，它不懂装懂，只想取悦你。</p>
<p><strong>他的建议是</strong>：</p>
<ol>
<li><strong>不要迷信生成</strong>：不要因为 AI 生成了代码就直接用，就像你不会盲目复制 Stack Overflow 的代码一样。</li>
<li><strong>上下文为王</strong>：AI 不是魔法，它只是一个强大的搜索引擎。如果你想得到正确答案，你必须先给它提供正确的<strong>上下文（Context）</strong>。</li>
<li><strong>先训练自己，再训练模型</strong>：在成为“提示词工程师”之前，先成为一名合格的工程师。只有当你自己深刻理解了问题，你才能判断 AI 的回答是天才还是垃圾。</li>
</ol>
<h2>给技术人的最后忠告</h2>
<p>演讲的最后，Kelsey 回答了关于开源、职业发展和未来的提问。他的几条忠告，值得每一位技术人铭记：</p>
<ul>
<li><strong>关于职业</strong>：“你的职业生涯不应该是一场马拉松，而应该是一场<strong>接力赛</strong>。当你到达巅峰时，想的应该是如何把接力棒交给下一个人，而不是霸占着位置直到倒下。”</li>
<li><strong>关于开源</strong>：“不要被商业公司的许可证游戏迷惑。如果代码是公开的，你可以 fork，可以学习。真正的开源精神在于分享和协作，而不在于谁拥有控制权。”</li>
<li><strong>关于专注</strong>：像那家只做钳子的德国公司（Knipex）一样，专注做好一件事。技术圈不缺追风者，缺的是能够沉下心来，把一项技术打磨到极致、直到它变得“无聊”和“隐形”的工匠。</li>
</ul>
<h2>小结</h2>
<p>Kelsey Hightower 的这场演讲，是对当前浮躁技术圈的一剂清醒剂。</p>
<p>他提醒我们，技术的真正价值，不在于它有多新、多热，而在于它是否真正解决了问题，是否被<strong>完整地</strong>交付了。在所有人都在谈论 AI 的今天，或许我们更应该关注那些被遗忘的“球门”，去完成那些尚未完成的伟大工程。</p>
<p>资料链接：https://www.youtube.com/watch?v=x1t2GPChhX8</p>
<hr />
<p><strong>你的“烂尾”故事</strong></p>
<p>Kelsey 的“海啸循环”论断让人深思。在你的职业生涯中，是否也经历过这种“还没做完旧技术，就被迫去追新热点”的无奈？你认为在这个 AI 时代，我们该如何保持“工匠精神”？</p>
<p>欢迎在评论区分享你的经历或思考！让我们一起在喧嚣中寻找内心的宁静。</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>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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/01/22/why-are-we-still-talking-about-containers-in-ai-age/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MinIO 开源版突发“安乐死”：维护模式开启，社区愤怒，你的数据还安全吗？</title>
		<link>https://tonybai.com/2025/12/04/minio-enter-maintenance-mode/</link>
		<comments>https://tonybai.com/2025/12/04/minio-enter-maintenance-mode/#comments</comments>
		<pubDate>Thu, 04 Dec 2025 09:40:44 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AGPL]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AIStor]]></category>
		<category><![CDATA[Ceph]]></category>
		<category><![CDATA[CLA]]></category>
		<category><![CDATA[CloudVendors]]></category>
		<category><![CDATA[Garage]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[MaintenanceMode]]></category>
		<category><![CDATA[minio]]></category>
		<category><![CDATA[ObjectStorage]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[RustFS]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[SeaweedFS]]></category>
		<category><![CDATA[SSPL]]></category>
		<category><![CDATA[Valkey]]></category>
		<category><![CDATA[VersityGateway]]></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=5476</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/12/04/minio-enter-maintenance-mode 大家好，我是Tony Bai。 “这个项目目前处于维护状态，不接受新的更改。” 近日，GitHub 上拥有近 60k Star、Go 语言生态中最著名的开源对象存储项目——MinIO，悄然修改了其 README。这一行看似平淡的声明，标志着 MinIO 开源版实际上已经被宣判了“死刑”。 曾经，MinIO 是自建 S3 兼容存储的首选，是开源界的宠儿。如今，它转身拥抱了企业级市场和 AI 浪潮，留下了一脸错愕的社区用户和无数依赖它的开源项目。这究竟是一场无奈的求生，还是一次蓄谋已久的“收割”？ 突如其来的“维护模式” MinIO 官方在没有任何预警的情况下，将其开源仓库置于“维护模式”。这意味着： 功能冻结：不再接受任何新功能或改进。 社区关门：不再接受 Pull Request，现有的 Issue 和 PR 也不会被积极审查。 安全补丁随缘：关键的安全修复“可能”会根据具体情况进行评估，不再有保证。 官方建议很明确：“对于企业支持和积极维护的版本，请参阅MinIO AIStor。”，而AIStor则是MinIO的企业版对象存储产品。 这一举动在 Hacker News 上引发了轩然大波。用户感到被背叛，一位评论者愤怒地写道：“太恶心了。构建一个产品，通过开源获得动力，等你做完了就完全抛弃它。我为曾经推广这个项目感到羞耻。” 为何“背叛”？—— 商业化的必然与 AI 的诱惑 MinIO 的转向并非无迹可寻。从更换为更严格的 AGPL 协议，到此次事实上的闭源，其背后的逻辑清晰而冷酷： 开源无法变现的困境 MinIO 作为一个高性能、单二进制文件的存储服务，太容易“被集成”了。云厂商、集成商可以轻松地将其打包进自己的产品中获利，而 MinIO 公司却难以从中分一杯羹。AGPL 协议虽然意在限制云厂商的“白嫖”，但也未能从根本上解决其商业化难题。 AI 浪潮的巨大诱惑 MinIO [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/minio-enter-maintenance-mode-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/12/04/minio-enter-maintenance-mode">本文永久链接</a> &#8211; https://tonybai.com/2025/12/04/minio-enter-maintenance-mode</p>
<p>大家好，我是Tony Bai。</p>
<p>“这个项目目前处于维护状态，不接受新的更改。”</p>
<p>近日，GitHub 上拥有近 60k Star、Go 语言生态中最著名的开源对象存储项目——MinIO，<a href="https://github.com/minio/minio/commit/27742d469462e1561c776f88ca7a1f26816d69e2">悄然修改了其 README</a>。这一行看似平淡的声明，标志着 MinIO 开源版实际上已经被宣判了“死刑”。</p>
<p>曾经，MinIO 是自建 S3 兼容存储的首选，是开源界的宠儿。如今，它转身拥抱了企业级市场和 AI 浪潮，留下了一脸错愕的社区用户和无数依赖它的开源项目。这究竟是一场无奈的求生，还是一次蓄谋已久的“收割”？</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<h2>突如其来的“维护模式”</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/minio-enter-maintenance-mode-2.png" alt="" /></p>
<p>MinIO 官方在没有任何预警的情况下，将其开源仓库置于“维护模式”。这意味着：</p>
<ul>
<li><strong>功能冻结</strong>：不再接受任何新功能或改进。</li>
<li><strong>社区关门</strong>：不再接受 Pull Request，现有的 Issue 和 PR 也不会被积极审查。</li>
<li><strong>安全补丁随缘</strong>：关键的安全修复“可能”会根据具体情况进行评估，不再有保证。</li>
</ul>
<p>官方建议很明确：<strong>“对于企业支持和积极维护的版本，请参阅<a href="https://github.com/minio/aistor">MinIO AIStor</a>。”</strong>，而AIStor则是MinIO的企业版对象存储产品。</p>
<p>这一举动<a href="https://news.ycombinator.com/item?id=46136023">在 Hacker News 上引发了轩然大波</a>。用户感到被背叛，一位评论者愤怒地写道：“太恶心了。构建一个产品，通过开源获得动力，等你做完了就完全抛弃它。我为曾经推广这个项目感到羞耻。”</p>
<h2>为何“背叛”？—— 商业化的必然与 AI 的诱惑</h2>
<p>MinIO 的转向并非无迹可寻。从更换为更严格的 AGPL 协议，到此次事实上的闭源，其背后的逻辑清晰而冷酷：</p>
<h3>开源无法变现的困境</h3>
<p>MinIO 作为一个高性能、单二进制文件的存储服务，太容易“被集成”了。云厂商、集成商可以轻松地将其打包进自己的产品中获利，而 MinIO 公司却难以从中分一杯羹。AGPL 协议虽然意在限制云厂商的“白嫖”，但也未能从根本上解决其商业化难题。</p>
<h3>AI 浪潮的巨大诱惑</h3>
<p>MinIO 的新产品名为 <strong>AIStor</strong>。这不仅仅是一个改名，更是一次战略转型。在 AI 时代，数据存储是基础设施的核心。MinIO 试图通过重新包装，将自己定位为 AI 基础设施的关键组件，从而向更有付费能力的企业客户（尤其是 AI 公司）靠拢。</p>
<p>正如一位 HN 用户指出的：“他们在上一轮融资中估值 10 亿美元，要想成功退出，必须有深口袋的买家（如 Nvidia, Dell 等）。现在的开源版本只会拖累他们的财报。”</p>
<h2>社区的反击与法律迷局</h2>
<p>MinIO 的做法也引发了法律层面的争议。</p>
<ul>
<li><strong>贡献者的权利</strong>：MinIO 曾要求贡献者签署 CLA（贡献者许可协议）。这意味着 MinIO 公司拥有代码的版权，他们确实有权改变许可证或停止开源。</li>
<li><strong>AGPL 的约束</strong>：但对于那些没有签署 CLA 的早期贡献者，或者包含在代码库中的第三方 AGPL 代码，MinIO 是否有权单方面“私有化”？这是一个复杂的法律问题。</li>
</ul>
<p>更有趣的是，MinIO 过去曾因 AGPL 许可问题积极“维权”，甚至公开指责其他公司违反协议。如今，它自己却试图摆脱开源的束缚，这种双重标准让社区感到讽刺。</p>
<h2>历史的镜像 —— Redis 与 Valkey 的启示</h2>
<p>MinIO 的剧变，让人不由得想起了 2024 年初震动开源界的另一场“地震”——<strong>Redis 修改开源协议事件</strong>。</p>
<p>当时，Redis Inc. 宣布不再遵循开源定义，转而采用限制性更强的 SSPL 协议。这一举动激怒了整个社区和云厂商，Linux 基金会迅速集结了 AWS、Google、Oracle 等巨头，基于 Redis 旧版本 fork 出了 <strong>Valkey</strong>。如今，Valkey 已经展现出取代 Redis 的蓬勃生命力。</p>
<p><strong>MinIO 与 Redis 的异同：</strong></p>
<ul>
<li><strong>相同点</strong>：两者都面临“云厂商困境”。AWS 直接拿 Redis 做 ElastiCache，拿 MinIO 做兼容 S3 的服务，却无需向原厂付费。原厂为了生存，不得不通过协议（AGPL/SSPL）或停止维护来“筑墙”。</li>
<li><strong>不同点</strong>：Redis 选择了<strong>“掀桌子”</strong>（改协议），引发了激烈的对抗和即时的 Fork（Valkey）；而 MinIO 选择了<strong>“冷处理”</strong>（维护模式），这更像是一种温水煮青蛙式的告别。</li>
</ul>
<p><strong>MinIO 会迎来它的“Valkey 时刻”吗？</strong></p>
<p>目前来看，难。对象存储的复杂度和维护成本远高于内存缓存，且市场上已经存在成熟的替代品（如 SeaweedFS, Ceph, Garage）。MinIO 社区或许不会像 Redis 那样迅速集结出一个统一的 Fork，而是会走向<strong>分裂和迁徙</strong>。</p>
<p>对于开发者而言，Redis 和 MinIO 的连续“暴雷”是一个明确的信号：<strong>在基础设施选型时，除了关注技术指标，更要评估其背后的治理模式。由单一商业公司绝对控制的“开源”项目，始终悬着一把达摩克利斯之剑。</strong></p>
<h2>自救指南 —— 寻找 MinIO 的替代品</h2>
<p>对于现有的 MinIO 用户来说，现在是时候寻找备胎了。社区推荐了几个值得关注的替代方案：</p>
<h3>SeaweedFS (Go)</h3>
<ul>
<li><strong>特点</strong>：基于 Haystack 论文实现，擅长处理海量小文件，自带 File 和 S3 接口。</li>
<li><strong>适用场景</strong>：需要高性能小文件存储的场景。</li>
<li><strong>评价</strong>：功能丰富，甚至有点“过度”，但性能强悍。</li>
</ul>
<h3>Ceph (C++)</h3>
<ul>
<li><strong>特点</strong>：存储界的瑞士军刀，功能极其强大，但也极其复杂。</li>
<li><strong>适用场景</strong>：大规模、生产级、需要块存储和文件存储的场景。</li>
<li><strong>评价</strong>：如果你有运维团队，Ceph 是永远不会错的选择。</li>
</ul>
<h3><a href="https://github.com/versity/versitygw/">Versity Gateway (Go)</a></h3>
<ul>
<li><strong>特点</strong>：基于文件的 S3 网关，可以在开发测试环境作为 MinIO 的直接替代品，后端直接对接文件系统。</li>
</ul>
<h3>RustFS (Rust)</h3>
<ul>
<li><strong>特点</strong>：野心勃勃的新晋选手，试图在性能和易用性上直接对标甚至超越 MinIO。</li>
<li><strong>适用场景</strong>：极客尝鲜、非生产环境的测试与评估。</li>
<li><strong>评价</strong>：社区评价两极分化。一方面，它展现了强大的潜力；另一方面，用户反馈其目前<strong>稳定性欠佳</strong>，且项目要求签署 CLA（贡献者许可协议），这让不少刚被 MinIO 伤过心的开发者担心它未来会重演“养肥再杀”的剧本。<strong>“潜力巨大，但需谨慎观望。”</strong></li>
</ul>
<h3><a href="https://github.com/deuxfleurs-org/garage">Garage</a> (Rust)</h3>
<ul>
<li><strong>特点</strong>：轻量级、自包含、专注于在异构硬件和地理分布的网络上运行。</li>
<li><strong>适用场景</strong>：自托管、家庭实验室、中小规模集群。</li>
<li><strong>评价</strong>：“非常稳固，简单可靠，没有风险投资背景。”</li>
</ul>
<h2>小结：开源的尽头是商业，还是背叛？</h2>
<p>MinIO 的故事，是开源软件商业化困境的又一个注脚。它提醒我们：</p>
<ul>
<li><strong>没有免费的午餐</strong>：由 VC 支持的开源项目，最终都要面临盈利的压力。当增长遇到瓶颈，社区往往是被牺牲的第一个对象。</li>
<li><strong>选择开源项目需谨慎</strong>：除了代码质量，项目的治理结构、CLA 协议、背后的商业模式，都是选型时必须考虑的风险因素。</li>
</ul>
<p>MinIO 虽已“离去”，但开源精神不死。也许下一个更好的 MinIO，正在某个 GitHub 的角落里悄然生长。</p>
<p>资料链接：https://news.ycombinator.com/item?id=46136023</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>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/12/04/minio-enter-maintenance-mode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>霸榜 GitHub 一周！Google 开源 ADK for Go，彻底终结 AI“炼丹”时代？</title>
		<link>https://tonybai.com/2025/11/24/google-adk-go-in-action/</link>
		<comments>https://tonybai.com/2025/11/24/google-adk-go-in-action/#comments</comments>
		<pubDate>Mon, 24 Nov 2025 00:15:27 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[ADK]]></category>
		<category><![CDATA[ADKforGo]]></category>
		<category><![CDATA[Agent]]></category>
		<category><![CDATA[AgentDevelopmentKit]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[ClaudeCode]]></category>
		<category><![CDATA[CodeFirst]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Gin]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[gotest]]></category>
		<category><![CDATA[Go代码]]></category>
		<category><![CDATA[gRPC]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Mock]]></category>
		<category><![CDATA[Prompt]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[TonyBai]]></category>
		<category><![CDATA[workflowagents]]></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>
		<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=5431</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/11/24/google-adk-go-in-action 大家好，我是Tony Bai。 上周，我花了一个下午，仅仅是为了让一个Python写的Agent能稳定地调用我Go服务里的一个简单函数。在那一刻，看着屏幕上纠缠的gRPC、Python虚拟环境和混乱的日志，我脑海里只有一个念头：这不对劲，这绝对不是软件工程该有的样子！ 显然，不仅仅是我一个人在为此焦虑。 就在最近，一个名为 google/adk-go 的项目悄然开源，并迅速霸榜 GitHub Go 语言趋势榜长达一周之久！ 全球的 Gopher 似乎都在用脚投票，表达着同一个渴望：我们受够了“炼丹”，我们要回归工程！ 过去的一年，AI 的浪潮席卷了整个技术圈。我们 Gopher，作为构建云原生世界的中坚力量，看着 Python 社区在 AI 领域“杀”得热火朝天，心中或许都有一个共同的疑问： “这场 AI 的盛宴，我们 Gopher 的主菜在哪儿？” 我们习惯了用 goroutine 优雅地处理并发，用 channel 安全地传递消息，用静态编译的单个二进制文件征服任何服务器。我们是天生的“工程师”，我们信奉的是可测试、可维护、可部署的软件工程哲学。 然而，当我们尝试踏入 AI Agent 的世界时，却常常感觉自己像一个闯入了“炼丹房”的“机械师”。面对那些需要反复“吟唱咒语”（调 Prompt）、结果飘忽不定的“丹炉”（模型），我们不禁会问： 我的 Agent 行为不稳定，怎么写单元测试？ Prompt 稍微一改，整个“丹方”都可能失效，版本管理怎么做？ 我如何将这个“充满魔法”的 Python 脚本，与我现有的 Go 微服务体系优雅地集成，而不是变成一坨无法维护的“耦合怪”？ 这些问题，不是因为我们不懂 AI，而是因为我们太懂工程。我们厌倦了“炼丹”式的不确定性，我们渴望一种能将 AI 的强大能力，用严谨的工程纪律约束起来的解决方案。 现在，Google 亲自下场，为我们递来了“工程图纸”。 Google [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/google-adk-go-in-action-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/11/24/google-adk-go-in-action">本文永久链接</a> &#8211; https://tonybai.com/2025/11/24/google-adk-go-in-action</p>
<p>大家好，我是Tony Bai。</p>
<p>上周，我花了一个下午，仅仅是为了让一个Python写的Agent能稳定地调用我Go服务里的一个简单函数。在那一刻，看着屏幕上纠缠的gRPC、Python虚拟环境和混乱的日志，我脑海里只有一个念头：这不对劲，这绝对不是软件工程该有的样子！</p>
<p>显然，不仅仅是我一个人在为此焦虑。</p>
<p><strong>就在最近，一个名为 google/adk-go 的项目悄然开源，并迅速霸榜 GitHub Go 语言趋势榜长达一周之久！</strong> 全球的 Gopher 似乎都在用脚投票，表达着同一个渴望：我们受够了“炼丹”，我们要回归工程！</p>
<p>过去的一年，AI 的浪潮席卷了整个技术圈。我们 Gopher，作为构建云原生世界的中坚力量，看着 Python 社区在 AI 领域“杀”得热火朝天，心中或许都有一个共同的疑问：</p>
<p><strong>“这场 AI 的盛宴，我们 Gopher 的主菜在哪儿？”</strong></p>
<p>我们习惯了用 goroutine 优雅地处理并发，用 channel 安全地传递消息，用静态编译的单个二进制文件征服任何服务器。我们是天生的<strong>“工程师”</strong>，我们信奉的是<strong>可测试、可维护、可部署</strong>的软件工程哲学。</p>
<p>然而，当我们尝试踏入 AI Agent 的世界时，却常常感觉自己像一个闯入了“炼丹房”的“机械师”。面对那些需要反复“吟唱咒语”（调 Prompt）、结果飘忽不定的“丹炉”（模型），我们不禁会问：</p>
<ul>
<li><strong>我的 Agent 行为不稳定，怎么写单元测试？</strong></li>
<li><strong>Prompt 稍微一改，整个“丹方”都可能失效，版本管理怎么做？</strong></li>
<li><strong>我如何将这个“充满魔法”的 Python 脚本，与我现有的 Go 微服务体系优雅地集成，而不是变成一坨无法维护的“耦合怪”？</strong></li>
</ul>
<p>这些问题，不是因为我们不懂 AI，而是因为我们太懂<strong>工程</strong>。我们厌倦了“炼丹”式的不确定性，我们渴望一种能将 AI 的强大能力，<strong>用严谨的工程纪律约束起来</strong>的解决方案。</p>
<p><strong>现在，Google 亲自下场，为我们递来了“工程图纸”。</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<h2>Google ADK for Go：写给工程师的 AI Agent 开发框架</h2>
<p>这个霸榜的项目，全称是 <strong><a href="https://github.com/google/adk-go">Agent Development Kit (ADK) for Go</a></strong>。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/google-adk-go-in-action-2.png" alt="" /></p>
<p>这不是又一个“玩具”或“研究性”框架。从它的设计理念中，我看到了一个清晰而坚定的信号——<strong>AI Agent 开发，正在从“炼丹”式的“艺术创作”，全面进入“工程化”的“工业生产”时代。</strong></p>
<p>而 ADK for Go 的核心哲学，与我们 Gopher 的信仰不谋而合，那就是——<strong>代码优先 (Code-First)</strong>。</p>
<ul>
<li><strong>你的 Agent，就是你的 Go 代码：</strong> 不再有晦涩的 YAML，不再有天书般的“链”，Agent 的所有逻辑、决策、工作流，都由你亲手编写的、地地道道的 Go 代码来定义。</li>
<li><strong>天生的可测试性：</strong> 你的 Agent 就是一个实现了 agent.Agent 接口的 struct。这意味着什么？你可以像测试任何 Go 代码一样，go test 走起！Mock 依赖、断言行为，所有你熟悉的工程实践，全部回归。</li>
<li><strong>Git 即版本管理：</strong> Agent 的每一次进化，都是一次清晰的 git commit。Code Review、版本回滚，一切都尽在掌握。</li>
<li><strong>云原生无缝集成：</strong> 它就是一个标准的 Go 模块，可以被无缝地集成到你的 Gin/gRPC 服务中，打包成一个极小的 Docker 镜像，部署到任何 K8s 集群。</li>
</ul>
<p><strong>这就是为什么它能霸榜 GitHub 的原因——它不是在教你如何更好地“调优 Prompt”，而是在教你如何用坚实的工程代码，去彻底终结那个不可控的“炼丹”时代。</strong></p>
<p>Google的adk-go，就是那座连接 Gopher 工程世界与 AI Agent 智能世界的桥梁。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/google-adk-go-in-action-3.png" alt="" /></p>
<h2>和我一起，从零开始“造”一个真正的 AI Agent</h2>
<p>坦白说，ADK for Go 刚刚推出，市面上的教程几乎一片空白。文档虽有，但如何将其与真实的工程场景结合，如何理解其设计背后的权衡，如何避开那些必将遇到的“坑”——这些都需要有人去<strong>探索</strong>，去<strong>趟路</strong>。</p>
<p><strong>所以，我决定做这件事。</strong></p>
<p>我将以一个<strong>“学伴”</strong>和<strong>“探索者”</strong>的身份，推出我的全新付费微专栏：</p>
<p><strong>《Google ADK 实战：用 Go 构建可靠的AI Agent》</strong></p>
<p>在这个专栏里，我不会扮演一个无所不知的专家。相反，我会将我从零开始学习、实践、踩坑、顿悟的全过程，毫无保留地分享给你。</p>
<p>我们将一起，手把手地、<strong>从一个空 main.go 文件开始</strong>，完成一次令人兴奋的创造之旅：</p>
<ul>
<li>
<p><strong>第 1-2 讲：思维转变与灵魂注入</strong><br />
我们将彻底理解“代码优先”的哲学，拆解adk-go，了解其中的概念、架构和核心组件，并亲手定义出第一个实现了 agent.Agent 核心接口的智能体。</p>
</li>
<li>
<p><strong>第 3 讲：为 Agent 插上“手臂”：</strong> 让你的Agent能调用任何Go函数，像操作自己的手脚一样自如<br />
我们将学会 ADK 的“魔法”函数 functiontool.New，将一个普通的 Go 函数，零成本地转化为 Agent 可用的工具。</p>
</li>
<li>
<p><strong>第 4 讲：赋予 Agent “双核记忆”</strong><br />
我们将深入 session（短期记忆）和 memory（长期记忆），让我们的 Agent 能够理解上下文，并记起与你的历史交互。</p>
</li>
<li>
<p><strong>第 5 讲：从“单兵”到“军团”：</strong> 构建一个懂分工、会协作的Agent团队，自动化完成复杂任务<br />
我们将学习 workflowagents，通过编排多个专家 Agent，构建一个强大的“代码生成-审查-重构”自动化流水线。</p>
</li>
<li>
<p><strong>第 6 讲：从“原型”到“产品”</strong><br />
我们将为 Agent 建立科学的<strong>评估体系</strong>，并最终将其打包成 Docker 镜像，部署到通用的 Kubernetes 环境中。</p>
</li>
</ul>
<p>学完这个专栏，你将收获的，不仅是一个能跑起来的酷炫 AI 项目，更是一套<strong>可复用的、工程化的 AI Agent 构建方法论</strong>，以及在 AI 新浪潮中，属于我们 Gopher 的那份自信和底气。</p>
<h2>加入这场 Gopher 的 AI 工程化之旅</h2>
<p>这个微专栏，是我为你，也为我自己准备的一份“AI 时代 Gopher 生存指南”。它凝聚了我对 Go 工程哲学的理解，和我对 AI Agent 未来的全部热情。</p>
<p>微专栏共 <strong>6 篇深度长文</strong>，每一篇都是我亲手实践、细节满满的 step-by-step “航海日志”。</p>
<p>我没有设定一个高昂的价格，而是希望与更多志同道合的 Gopher 一起探索。所以，订阅这份专栏，<strong>仅需你一杯咖啡的诚意</strong>。</p>
<p>花一杯咖啡的时间，你或许能得到片刻的清醒；而用同样的价格投入到这里，我希望能为你带来一次<strong>思维的升级</strong>和<strong>技能的跃迁</strong>。</p>
<p><strong>点击<a href="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIyNzM0MDk0Mg==&amp;action=getalbum&amp;album_id=4266729696274251779#wechat_redirect">这里</a>，或扫描二维码，立即加入。</strong></p>
<p><strong>让我们一起，用代码，构建智能。</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<p><strong>P.S.</strong> 如果你对 AI Agent、Go 语言或者这个微专栏有任何问题，欢迎在评论区留言，我们一起交流探讨！</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>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/11/24/google-adk-go-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“可移植性”的隐藏成本：Go为何要重塑maphash并划定新的运行时边界？</title>
		<link>https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries/</link>
		<comments>https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries/#comments</comments>
		<pubDate>Mon, 22 Sep 2025 23:59:46 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AustinClements]]></category>
		<category><![CDATA[crypto/rand]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gopherjs]]></category>
		<category><![CDATA[GopherJS项目]]></category>
		<category><![CDATA[Go团队]]></category>
		<category><![CDATA[Go语言第一课]]></category>
		<category><![CDATA[Go语言进阶课]]></category>
		<category><![CDATA[Go运行时]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[internal/reflectlite]]></category>
		<category><![CDATA[internal/sync]]></category>
		<category><![CDATA[maphash]]></category>
		<category><![CDATA[purego]]></category>
		<category><![CDATA[Reflect]]></category>
		<category><![CDATA[TinyGo]]></category>
		<category><![CDATA[unique]]></category>
		<category><![CDATA[unsafe]]></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>
		<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=5191</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries 大家好，我是Tony Bai。 对于大多数Go开发者来说，标准库似乎是一个浑然天成的整体。我们理所当然地使用着fmt、net/http和encoding/json，很少去思考它们内部的依赖关系和架构边界。然而，在标准库光鲜的外表之下，一场关于其核心架构的深刻变革正在悄然发生，而hash/maphash这个看似不起眼的包，正处在这场变革的风暴中心。 最近，Go核心团队的技术负责人Austin Clements在2025年9月17日的提案审查会议中，将他在2025年6月提出的issue #74285的提案设置为“已接受”（Accepted）状态。该提案名为“maphash: drop purego version and establish stronger runtime boundary”，建议移除maphash包的purego实现，并为Go标准库建立一个更清晰的“运行时边界”。 在过去几个月中，Go团队与社区围绕maphash的讨论，以及与TinyGo、GopherJS等社区的精彩互动，揭示了在设计一个世界级标准库时，面临的关于可移植性、依赖管理和生态系统健康的深刻权衡。 在这篇文章中，我就和大家一起来探讨这一提案的背景、影响以及在实现过程中所面临的挑战。 问题的核心：maphash的两副面孔 maphash包的功能很简单：它暴露了Go语言内置map类型所使用的哈希函数。但为了支持不同的Go实现（如标准编译器gc、TinyGo、GopherJS），它内部存在两个截然不同的版本： gc版本 (运行时绑定，对应标准编译器gc): 实现: 深度绑定Go gc运行时，直接使用编译器为map生成的、经过高度优化的哈希函数。 依赖: 极其轻量，只依赖8个底层包。 优点: 性能极高，依赖图谱干净。 purego版本 (可移植): 实现: 为了能在非gc环境（如TinyGo、GopherJS）中运行，它使用纯Go代码重新实现了一套哈希算法（wyhash），并通过reflect包来遍历类型，用crypto/rand生成随机种子。 依赖: 这是一个灾难。purego版本引入了多达87个包的依赖，形成了一个庞大的依赖树。 优点: 理论上具有更好的可移植性。 这个“可移植”的purego版本，正是问题的根源。一个本应是底层、基础的哈希库，却因为reflect和crypto/rand的引入，使其在依赖图谱中的位置变得异常之高。 “可移植性”的隐藏成本 这种臃肿的依赖关系带来了致命的副作用：标准库的底层包无法使用maphash。 想象一下，如果internal/sync或unique这些极其底层的包想要使用maphash，它们就会被迫将reflect和crypto/rand等80多个重量级包引入到Go运行时的最底层。这将造成灾难性的依赖循环和二进制文件膨胀。 正如Austin Clements在提案中所说，purego版本的存在，使得maphash无法在它本该发挥最大价值的地方被使用，甚至在一些高层包中也引入了棘手的依赖问题。为了追求对非标准编译器的“开箱即用”支持，整个标准库的架构健康付出了沉重的代价。 提案：划定边界，回归简单 因此，Go团队提出了一个看似激进但实则回归本源的方案：移除purego实现，并正式声明maphash是“运行时的一部分”。 这也是Go团队的一种态度的表达：Go标准库需要一条清晰的界线，来区分哪些是可移植的、与运行时无关的代码，哪些是与特定工具链（如gc）紧密绑定的代码。 提案初期，Go团队提出的实现方案如下： maphash的核心哈希逻辑保留在可移植的文件中。 与gc运行时交互的“胶水代码”被隔离到一个单独的文件中，并使用//go:build gc标签进行标记。 其他Go实现（如TinyGo）可以轻松地提供它们自己的“胶水代码”文件，来对接它们各自的运行时，而无需维护一个完整、复杂且依赖臃肿的purego版本。 但这个方案立刻引发了TinyGo和GopherJS社区核心维护者的深入讨论： TinyGo的视角: TinyGo维护者表示，他们更倾向于使用//go:linkname来链接到运行时的内部函数。这种方式的“接口”更小、更稳定，比为每个包提供一个“胶水文件”更容易维护。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/go-maphash-portability-costs-and-runtime-boundaries-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries">本文永久链接</a> &#8211; https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries</p>
<p>大家好，我是Tony Bai。</p>
<p>对于大多数Go开发者来说，标准库似乎是一个浑然天成的整体。我们理所当然地使用着fmt、net/http和encoding/json，很少去思考它们内部的依赖关系和架构边界。然而，在标准库光鲜的外表之下，一场关于其核心架构的深刻变革正在悄然发生，而hash/maphash这个看似不起眼的包，正处在这场变革的风暴中心。</p>
<p>最近，Go核心团队的技术负责人Austin Clements在2025年9月17日的提案审查会议中，将他在2025年6月提出的<a href="https://github.com/golang/go/issues/74285">issue #74285</a>的提案设置为“已接受”（Accepted）状态。该提案名为“maphash: drop purego version and establish stronger runtime boundary”，建议移除maphash包的purego实现，并为Go标准库建立一个更清晰的“运行时边界”。</p>
<p>在过去几个月中，Go团队与社区围绕maphash的讨论，以及与TinyGo、GopherJS等社区的精彩互动，揭示了在设计一个世界级标准库时，面临的关于<strong>可移植性、依赖管理和生态系统健康</strong>的深刻权衡。</p>
<p>在这篇文章中，我就和大家一起来探讨这一提案的背景、影响以及在实现过程中所面临的挑战。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/database-design-practices-pr.png" alt="" /></p>
<h2>问题的核心：maphash的两副面孔</h2>
<p>maphash包的功能很简单：它暴露了Go语言内置map类型所使用的哈希函数。但为了支持不同的Go实现（如标准编译器gc、TinyGo、GopherJS），它内部存在两个截然不同的版本：</p>
<ol>
<li>
<p><strong>gc版本 (运行时绑定，对应标准编译器gc)</strong>:</p>
<ul>
<li><strong>实现</strong>: 深度绑定Go gc运行时，直接使用编译器为map生成的、经过高度优化的哈希函数。</li>
<li><strong>依赖</strong>: 极其轻量，只依赖8个底层包。</li>
<li><strong>优点</strong>: 性能极高，依赖图谱干净。</li>
</ul>
</li>
<li>
<p><strong>purego版本 (可移植)</strong>:</p>
<ul>
<li><strong>实现</strong>: 为了能在非gc环境（如TinyGo、GopherJS）中运行，它使用纯Go代码重新实现了一套哈希算法（wyhash），并通过reflect包来遍历类型，用crypto/rand生成随机种子。</li>
<li><strong>依赖</strong>: <strong>这是一个灾难</strong>。purego版本引入了<strong>多达87个包</strong>的依赖，形成了一个庞大的依赖树。</li>
<li><strong>优点</strong>: 理论上具有更好的可移植性。</li>
</ul>
</li>
</ol>
<p>这个“可移植”的purego版本，正是问题的根源。一个本应是底层、基础的哈希库，却因为reflect和crypto/rand的引入，使其在依赖图谱中的位置变得异常之高。</p>
<h2>“可移植性”的隐藏成本</h2>
<p>这种臃肿的依赖关系带来了致命的副作用：<strong>标准库的底层包无法使用maphash</strong>。</p>
<p>想象一下，如果internal/sync或unique这些极其底层的包想要使用maphash，它们就会被迫将reflect和crypto/rand等80多个重量级包引入到Go运行时的最底层。这将造成灾难性的依赖循环和二进制文件膨胀。</p>
<p>正如Austin Clements在提案中所说，purego版本的存在，使得maphash无法在它本该发挥最大价值的地方被使用，甚至在一些高层包中也引入了棘手的依赖问题。为了追求对非标准编译器的“开箱即用”支持，整个标准库的架构健康付出了沉重的代价。</p>
<h2>提案：划定边界，回归简单</h2>
<p>因此，Go团队提出了一个看似激进但实则回归本源的方案：<strong>移除purego实现，并正式声明maphash是“运行时的一部分”。</strong></p>
<p>这也是Go团队的一种态度的表达：Go标准库需要一条清晰的界线，来区分哪些是<strong>可移植的、与运行时无关</strong>的代码，哪些是<strong>与特定工具链（如gc）紧密绑定</strong>的代码。</p>
<p>提案初期，Go团队提出的实现方案如下：</p>
<ul>
<li>maphash的核心哈希逻辑保留在可移植的文件中。</li>
<li>与gc运行时交互的“胶水代码”被隔离到一个单独的文件中，并使用//go:build gc标签进行标记。</li>
<li>其他Go实现（如TinyGo）可以轻松地提供它们自己的“胶水代码”文件，来对接它们各自的运行时，而无需维护一个完整、复杂且依赖臃肿的purego版本。</li>
</ul>
<p>但这个方案立刻引发了TinyGo和GopherJS社区核心维护者的深入讨论：</p>
<ul>
<li><strong>TinyGo的视角</strong>: TinyGo维护者表示，他们更倾向于使用//go:linkname来链接到运行时的内部函数。这种方式的“接口”更小、更稳定，比为每个包提供一个“胶水文件”更容易维护。</li>
<li><strong>GopherJS的视角</strong>: GopherJS的维护者也指出了一个更棘手的问题：GopherJS的运行环境（JavaScript）<strong>不支持unsafe指针操作</strong>，因此一个纯Go的实现对他们至关重要。直接移除purego版本会给他们带来巨大的维护负担。</li>
</ul>
<p>正是在这种建设性的讨论中，一个更完善、更具同理心的最终方案诞生了：</p>
<ol>
<li><strong>重构maphash</strong>: Go团队将重构maphash，使其运行时接口定义更清晰。</li>
<li><strong>精简purego</strong>: 重写purego的哈希实现，<strong>用internal/reflectlite替换庞大的reflect</strong>，并移除crypto/rand依赖，从而大幅削减其依赖树。</li>
<li><strong>移交所有权</strong>: 将这个精简后的、基于reflectlite的纯Go实现，<strong>移交给GopherJS项目自己维护</strong>。</li>
<li><strong>建立“防火墙”</strong>: 在Go标准库的依赖测试中，<strong>明确禁止reflectlite反向依赖maphash</strong>，从制度上杜绝未来可能出现的依赖循环。</li>
</ol>
<h2>小结</h2>
<p>这场关于maphash的深刻讨论，最终以一个“皆大欢喜”的方案被接受。它不仅解决了Go核心团队的燃眉之急，也充分尊重了生态伙伴的需求。对于我们普通Gopher来说，这场“标准库的内科手术”带来了几点重要启示：</p>
<ul>
<li><strong>没有免费的午餐</strong>：“可移植性”和“零依赖”等美好的设计目标，有时会带来意想不到的、系统级的隐藏成本。理解这些权衡，是做出优秀架构决策的前提。</li>
<li><strong>边界是清晰思考的产物</strong>：一个健康的系统，必然有清晰的边界。Go标准库正在通过这次重构，更严格地定义其内部的层次和依赖关系。我们在自己的项目中，也应该同样重视对模块和包的边界划分。</li>
<li><strong>开源的真正力量在于协作</strong>：这次提案的演进过程，完美地展示了一个成熟的开源社区是如何通过开放、理性的讨论，将一个单方面的决策，演进为一个凝聚了各方智慧、更具韧性的解决方案的。</li>
</ul>
<p>最终，一个更健康、更易于维护、内部依赖更清晰的Go标准库，将使整个生态系统中的每一个人受益。这，或许就是这场看似不起眼的maphash重构，带给我们的最大价值。</p>
<p>资料链接：https://github.com/golang/go/issues/74285</p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Azure CTO 深度解读：微软为何要用 Rust “替换” C/C++，又将如何用 AI 加速代码迁移？</title>
		<link>https://tonybai.com/2025/09/11/microsoft-is-getting-rusty/</link>
		<comments>https://tonybai.com/2025/09/11/microsoft-is-getting-rusty/#comments</comments>
		<pubDate>Thu, 11 Sep 2025 13:05:49 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[AzureDataExplorer]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Crate生态系统]]></category>
		<category><![CDATA[CTO]]></category>
		<category><![CDATA[DirectWrite]]></category>
		<category><![CDATA[DISKANN]]></category>
		<category><![CDATA[GenAI]]></category>
		<category><![CDATA[GraphRAG]]></category>
		<category><![CDATA[MarkRussinovich]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[ProjectMu]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Transpiler]]></category>
		<category><![CDATA[UEFI]]></category>
		<category><![CDATA[Win32k.sys]]></category>
		<category><![CDATA[Windows]]></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=5148</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/09/11/microsoft-is-getting-rusty 大家好，我是Tony Bai。 近日，微软 Azure CTO、技术巨擘 Mark Russinovich 在一场 Rust 技术会议上发表了闭幕演讲，以前所未有的坦诚和力度，揭示了微软内部正在进行的一场深刻的技术变革：全面拥抱 Rust，并战略性地替代 C/C++。 他不仅分享了 Rust 在 Windows 内核、Office、Azure 云等核心产品中的惊人实践案例，还首次披露了微软正在研发的、利用 AI 大模型自动将 C/C++ 代码转换为安全 Rust 的前沿工具。这既是一次技术分享，也是一份来自行业顶层的宣言。 在这篇文章中，我们就来看看微软在走向Rust的路上究竟做了哪些工作和改变，用户和社区的反馈又是如何。 战略驱动：为何微软必须转向 Rust？ 演讲开篇，Mark Russinovich 就抛出了一个触目惊心的数据，这也是驱动微软进行这场变革的根本原因： 在过去十几年中，微软所有产品中 70% 的安全漏洞，均由 C/C++ 中的内存安全问题导致。 他直言，这种趋势仍在继续，这已不仅仅是技术债，更是持续不断的安全事件和威胁。正是基于此，他个人早已成为 Rust 的坚定拥护者，并分享了一段有趣的往事：2022年，他在看到编程语言排行榜后，有感而发地发布了一条推文——“是时候停止在任何新项目中使用 C/C++ 了，业界应该转向 Rust”。 这条推文成为了他有史以来互动量最高的内容，甚至引来了微软 CEO Satya Nadella 的电话询问。而他的回答坚定不移：“是的，我坚信如此。” 这并非一时冲动，而是一场席卷微软的、自下而上与自上而下相结合的运动。从美国国家安全局 (NSA) 呼吁业界放弃内存不安全的语言，到微软自身因不安全代码被攻击后发起的“安全未来倡议 (Secure Future Initiative)”，微软上下已经形成共识：必须摆脱不安全的语言。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/microsoft-is-getting-rusty-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/09/11/microsoft-is-getting-rusty">本文永久链接</a> &#8211; https://tonybai.com/2025/09/11/microsoft-is-getting-rusty</p>
<p>大家好，我是Tony Bai。</p>
<p>近日，微软 Azure CTO、技术巨擘 Mark Russinovich 在一场 Rust 技术会议上发表了<a href="https://www.youtube.com/watch?v=1VgptLwP588">闭幕演讲</a>，以前所未有的坦诚和力度，揭示了微软内部正在进行的一场深刻的技术变革：全面拥抱 Rust，并战略性地替代 C/C++。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/microsoft-is-getting-rusty-2.png" alt="" /></p>
<p>他不仅分享了 Rust 在 Windows 内核、Office、Azure 云等核心产品中的惊人实践案例，还首次披露了微软正在研发的、利用 AI 大模型自动将 C/C++ 代码转换为安全 Rust 的前沿工具。这既是一次技术分享，也是一份来自行业顶层的宣言。</p>
<p>在这篇文章中，我们就来看看微软在走向Rust的路上究竟做了哪些工作和改变，用户和社区的反馈又是如何。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/go-micro-column-2025-pr.png" alt="" /></p>
<h2>战略驱动：为何微软必须转向 Rust？</h2>
<p>演讲开篇，Mark Russinovich 就抛出了一个触目惊心的数据，这也是驱动微软进行这场变革的根本原因：</p>
<blockquote>
<p><strong>在过去十几年中，微软所有产品中 70% 的安全漏洞，均由 C/C++ 中的内存安全问题导致。</strong></p>
</blockquote>
<p>他直言，这种趋势仍在继续，这已不仅仅是技术债，更是持续不断的安全事件和威胁。正是基于此，他个人早已成为 Rust 的坚定拥护者，并分享了一段有趣的往事：2022年，他在看到编程语言排行榜后，有感而发地发布了一条推文——<strong>“是时候停止在任何新项目中使用 C/C++ 了，业界应该转向 Rust”</strong>。</p>
<p>这条推文成为了他有史以来互动量最高的内容，甚至引来了微软 CEO Satya Nadella 的电话询问。而他的回答坚定不移：“是的，我坚信如此。”</p>
<p>这并非一时冲动，而是一场席卷微软的、自下而上与自上而下相结合的运动。从美国国家安全局 (NSA) 呼吁业界放弃内存不安全的语言，到微软自身因不安全代码被攻击后发起的“安全未来倡议 (Secure Future Initiative)”，微软上下已经形成共识：<strong>必须摆脱不安全的语言</strong>。</p>
<h2>实践版图：Rust 在微软核心产品中的落地生根</h2>
<p>Mark Russinovich 随后详细介绍了 Rust 在微软内部的实践版图，其广度和深度令人瞩目。</p>
<h3>Windows：从内核“阿喀琉斯之踵”开始</h3>
<ul>
<li><strong>Project Mu (UEFI 固件):</strong> 微软选择从安全性要求极高的系统引导固件入手，用 Rust 重写了 UEFI 实现（<a href="https://github.com/microsoft/mu">Project Mu</a>）。该项目已应用于 Azure 数据中心和 Surface 笔记本，并已开源，旨在推动整个硬件生态采用 Rust。</li>
<li><strong>DirectWrite (核心图形组件):</strong> 团队选择了一个漏洞频发的独立组件——负责字体解析的 DirectWrite 进行移植。两名开发者耗时六个月，将 <strong>15.4 万行</strong> C/C++ 代码移植为 Rust。结果不仅消除了安全隐患，还意外获得了 <strong>5% 到 15% 的性能提升</strong>。</li>
<li><strong>Win32k.sys (GDI 模块):</strong> 这是 Windows 安全的“阿喀琉斯之踵”，过去20年间漏洞不断。微软选择用 Rust 重写了其中的 GDI Regions 子系统。两名开发者耗时三个月，移植了 <strong>6.3 万行</strong> 代码进入内核态。尽管 C++/Rust 的互操作边界带来了巨大挑战，但项目最终成功，且没有性能衰退。如今，在 Windows 系统目录中，你甚至能找到带有 &#95;rs 后缀的内核模块文件。</li>
</ul>
<h3>Office 与 Azure 云：性能与安全的双重胜利</h3>
<ul>
<li><strong>Office (DISKANN 向量搜索):</strong> Office 团队将一个前沿的向量搜索算法（DISKANN）从 C++ 移植到 Rust，用于 Office 365 和 Azure Cosmos DB。结果是惊人的：在实现同等 QPS 的情况下，<strong>召回率显著提升，内存占用反而下降</strong>。</li>
<li><strong>Azure (CTO 的铁腕):</strong> Mark Russinovich 透露，早在发布那条著名推文的两三年前，他就已在 Azure 内部颁布指令：<strong>“Azure 中不再有新的 C++ 系统代码”</strong>。这一指令推动了 Rust 在 Azure 基础架构中的全面应用：
<ul>
<li><strong>硬件层面:</strong> 云服务器的开源可信根项目 <strong>Caliptra</strong>、深入每台服务器的 <strong>Azure Integrated HSM</strong> 硬件安全模块，其固件均由 Rust 编写。</li>
<li><strong>硬件卸载卡:</strong> 负责网络和存储处理的智能网卡（DPU）上的新组件，已全部使用 Rust 开发，部分已有 C++ 组件也被迁移到了 Rust。</li>
<li><strong>虚拟化:</strong> Hyper-V 的 Arm64 模拟代码已用 Rust 重写；最近开源的 <strong>Open VMM</strong>（一个准虚拟化监视器）完全由 Rust 构建；而革命性的 <a href="https://github.com/hyperlight-dev/hyperlight">Hyper-V Lite 项目</a>，能以微秒级速度启动一个超轻量级虚拟机来运行 WASM 负载，其原型虽为 C#，但最终的开源实现完全是 Rust。</li>
</ul>
</li>
<li><strong>Azure 服务:</strong>
<ul>
<li><strong>Azure Data Explorer (ADX):</strong> 这个每天处理 PB 级数据的日志分析平台，其 V2 版本后完全用 <strong>35 万行 Rust 代码</strong> 重写，性能超越 C++ 版本，成为微软内部 Rust 实践的标杆案例。</li>
<li><strong>Azure SDK for Rust:</strong> 顺应客户需求，Azure 官方已发布了 Rust SDK 的 Beta 版本，标志着 Rust 正式成为 Azure 的一等公民语言。</li>
</ul>
</li>
</ul>
<h2>真实反馈：来自一线开发者的收获与挑战</h2>
<p>这场变革并非一帆风顺。Mark Russinovich 坦诚地分享了一线开发者的真实反馈：</p>
<p>** 收获 (The Positives):**</p>
<ul>
<li><strong>“如果它能编译，它就能工作”</strong>: 这是开发者们提到最多的一点，与 C++ 编译通过后仍充满不确定性的体验形成鲜明对比。</li>
<li><strong>减少摩擦，专注创新</strong>: 消除了内存安全和数据竞争等底层心智负担。</li>
<li><strong>“两个月的转变”</strong>: 一个常见的模式是，C++ 开发者最初会对所有权和借用检查器感到痛苦，但大约两个月后，他们会转变为 Rust 的忠实拥护者。</li>
</ul>
<p>** 挑战 (The Negatives):**</p>
<ul>
<li><strong>C++ 互操作性是第一大难题</strong>: 在逐步替换大型 C++ 项目时，处理两种语言的边界问题耗费了大量精力。</li>
<li><strong>工具链仍有待成熟</strong>。</li>
<li><strong>Crate 生态系统</strong>: 开发者不确定应该使用和信任哪些第三方库。</li>
<li><strong>部分依赖的特性尚未稳定</strong>。</li>
<li><strong>动态链接</strong>: 在 Windows 生态中常见的动态链接，与 Rust 的结合存在问题。</li>
</ul>
<p>尽管存在这些挑战，但 Mark Russinovich 强调，<strong>优点已经足够让微软“全身心投入 (all in)”</strong>。</p>
<h2>展望未来：用 AI 加速 “去 C++” 进程</h2>
<p>演讲的最后，Mark Russinovich 揭示了微软正在探索的、旨在加速 Rust 迁移的“终极武器”——<strong>自动化代码翻译</strong>。</p>
<p>微软正在从两个方向推进这项工作：</p>
<ol>
<li><strong>专用转译器 (Transpiler):</strong> 针对特定领域，如经过形式化验证的加密库。微软研究团队已开发出一个工具，能将严格遵循特定规范的 C 代码<strong>自动、安全地转译为 100% safe 的 Rust 代码</strong>，并确保其数学验证在转译后依然有效。</li>
<li><strong>通用 AI 翻译器 (GenAI + GraphRAG):</strong> 这是更宏伟的目标。传统的 LLM 在处理多文件、复杂的 C++ 项目时效果不佳。微软正在利用一种名为 <strong>GraphRAG</strong> (图检索增强生成) 的先进技术。该技术能将代码解析为抽象语法树，并构建一个多层次的、包含代码摘要和依赖关系的图谱。当进行翻译时，AI 可以基于这个图谱进行更精准、更具上下文感知的代码生成。</li>
</ol>
<p>他现场演示了一个将多文件 Python 小游戏翻译为 Rust 的例子。普通的 GPT-4o 生成的代码无法编译，而 <strong>GraphRAG 驱动的翻译器则一次性生成了可完美运行的、100% safe 的 Rust 代码</strong>。</p>
<h2>总结：一场自上而下的语言革命</h2>
<p>Mark Russinovich 的演讲，标志着 Rust 在主流工业界的应用进入了一个全新的阶段。微软的实践雄辩地证明，用 Rust 替代 C/C++ 不仅是为了安全，更能带来意想不到的性能收益和开发体验提升。</p>
<p>更重要的是，微软的承诺是全方位的：从内部产品的深度重构，到对社区的资金支持，再到投入研发力量攻克 C++ 互操作和自动化迁移这两大核心难题。</p>
<p>正如 Mark 所言，一门语言的成熟需要超过十年的时间。Rust 已经走到了这个节点，其生态和工具链的成熟度已经达到了一个临界点，使得像微软这样的巨头可以放心下注。对于任何想要挑战 Rust 地位的新语言来说，都将面临一座极难逾越的高山。</p>
<p>微软的“All in”，不仅是对 Rust 过去的肯定，更是对未来的巨大投资。这无疑为整个软件行业指明了一个更安全、更高效的方向。</p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/09/11/microsoft-is-getting-rusty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从《凡人修仙传》看程序员境界：道友，你修炼到哪一层了？</title>
		<link>https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels/</link>
		<comments>https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels/#comments</comments>
		<pubDate>Mon, 08 Sep 2025 00:07:54 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Architect]]></category>
		<category><![CDATA[Ascension]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[CareerDevelopment]]></category>
		<category><![CDATA[Coder]]></category>
		<category><![CDATA[Codereview]]></category>
		<category><![CDATA[CoreFormation]]></category>
		<category><![CDATA[CRUD]]></category>
		<category><![CDATA[CTO]]></category>
		<category><![CDATA[Cultivation]]></category>
		<category><![CDATA[DatabaseOptimization]]></category>
		<category><![CDATA[DistributedSystems]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[FoundationEstablishment]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[HighConcurrency]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JuniorEngineer]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[LeetCode]]></category>
		<category><![CDATA[LevelDivision]]></category>
		<category><![CDATA[mapreduce]]></category>
		<category><![CDATA[MidlevelEngineer]]></category>
		<category><![CDATA[NascentSoul]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[PrincipalEngineer]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[ProgrammerLevels]]></category>
		<category><![CDATA[programminglanguage]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[QiRefining]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[SeniorEngineer]]></category>
		<category><![CDATA[SoftwareEngineer]]></category>
		<category><![CDATA[SpiritTransformation]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Stackoverflow]]></category>
		<category><![CDATA[SystemArchitecture]]></category>
		<category><![CDATA[TechLead]]></category>
		<category><![CDATA[TechnicalDebt]]></category>
		<category><![CDATA[TechnicalStandard]]></category>
		<category><![CDATA[TechSharing]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[Vue]]></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>
		<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=5131</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels 大家好，我是Tony Bai。 最近《凡人修仙传》的电视剧大火，想必各位道友都有耳闻。鄙人也没忍住，不仅刷完了杨洋主演的网剧，还趁着这股热乎劲儿，一口气在微信读书连读再听地补完了小说的人界篇。 当看到韩立资质平平，相貌普通，却凭着“小绿瓶”、远超常人的心智和不懈的努力，在残酷的修仙界中，历经炼气、筑基、结丹、元婴，终至化神时，我猛然拍案： 这不就是我们程序员升级打怪的真实写照吗？！ 仔细一想，还真是如此。在这“码农”修仙界，人人皆望飞升，脱离 CRUD 的苦海，证得架构大道。韩天尊从一介凡人，在人界一步步逆天修行；我们则从一行“Hello World”开始，在代码的世界里摸爬滚打。从初窥门径到执掌乾坤，其间的艰辛与突破，又何尝不是一场惊心动魄的修行？ 今日，不妨让我们借韩天尊的人界飞升之路，一同探寻这程序员的修仙境界。看看你我，如今身在何处，又该如何“破境”飞升。 第一境：炼气期 &#8211; 程序员学徒 炼气期 此境界的修士初入仙门，刚刚感应到“天地灵气”（编程语言），开始学习吐纳之法（基础语法）。灵力微薄，法术生疏，面对浩如烟海的功法秘籍（API文档），常常感到力不从心，一不小心就可能“走火入魔”（写出 Bug）。 境界特征： 初窥门径，灵力微薄： 刚掌握一门或多门“功法”（Java/Python/Go），但理解不深。能写出基础的业务逻辑，但对底层原理一知半解，如同只会念咒却不知其所以然。 修炼功法，打牢根基： 每日勤修不辍，疯狂“吸收灵石”（看文档、刷 LeetCode、学习框架）。主要任务是完成导师（Mentor）分配的“宗门任务”（小功能、Bug修复），以此换取修炼资源。 依赖法器，难离其身： 严重依赖各种“低阶法器”，如 Stack Overflow、CSDN 和各类 AI 代码助手。一旦“法器”失灵（断网），便束手无策，战力大减。 心魔与瓶颈： 最大的心魔是“我是不是不适合写代码”的自我怀疑。常常会遇到“瓶颈”，一个简单的 Bug 可能要耗费数日才能解决，此时急需一颗“筑基丹”（高人指点）方能突破。 第二境：筑基期 &#8211; 合格的工程师 筑基期 经历无数次“走火入魔”后，终于炼化灵气，开辟丹田，成功“筑基”，体内的“灵力”（知识体系）凝聚成形。从此，你不再是修仙界的炮灰，而是一名真正的修士，可以独立执行任务，在宗门（团队）中有了一席之地。 境界特征： 筑基成功，道途有望： 能够独立负责一个模块或一条业务线。对团队的技术栈了如指掌，是项目的中坚力量，道基稳固。 拥有本命法器： 不再是见什么用什么，而是有了自己得心应手的“本命法器”（精通的框架或工具链），如 Spring 全家桶、Vue/React 生态。使用起来得心应手，威力倍增。 神识初成，洞察秋毫： 开始具备一定的“神识”（Code Review 能力和设计嗅觉），能发现炼气期修士代码中的明显问题，并预见一些潜在的风险，如同神识外放，探查四周。 独立执行宗门任务： 可以独立外出执行有一定难度的“宗门任务”（负责一个完整需求），并能顺利归来，不再需要师兄寸步不离地看护。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels">本文永久链接</a> &#8211; https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels</p>
<p>大家好，我是Tony Bai。</p>
<p>最近《凡人修仙传》的电视剧大火，想必各位道友都有耳闻。鄙人也没忍住，不仅刷完了杨洋主演的网剧，还趁着这股热乎劲儿，一口气在微信读书连读再听地补完了小说的人界篇。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-0.png" alt="" /></p>
<p>当看到韩立资质平平，相貌普通，却凭着“小绿瓶”、远超常人的心智和不懈的努力，在残酷的修仙界中，历经<strong>炼气、筑基、结丹、元婴，终至化神</strong>时，我猛然拍案：</p>
<p><strong>这不就是我们程序员升级打怪的真实写照吗？！</strong></p>
<p>仔细一想，还真是如此。在这“码农”修仙界，人人皆望飞升，脱离 CRUD 的苦海，证得<a href="https://tonybai.com/2025/08/25/documents-the-architects-programming-language/">架构大道</a>。韩天尊从一介凡人，在人界一步步逆天修行；我们则从一行“Hello World”开始，在代码的世界里摸爬滚打。从初窥门径到执掌乾坤，其间的艰辛与突破，又何尝不是一场惊心动魄的修行？</p>
<p>今日，不妨让我们借韩天尊的人界飞升之路，一同探寻这程序员的修仙境界。看看你我，如今身在何处，又该如何“破境”飞升。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/go-micro-column-2025-pr.png" alt="" /></p>
<h2>第一境：炼气期 &#8211; 程序员学徒</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-2.png" alt="" /><br />
<center>炼气期</center></p>
<p>此境界的修士初入仙门，刚刚感应到“天地灵气”（<a href="https://tonybai.com/2024/10/24/cognitive-load-impact-on-programming-language-choice-and-study">编程语言</a>），开始学习吐纳之法（<a href="https://tonybai.com/2024/08/27/a-new-syntax-quiz-after-go-1-18/">基础语法</a>）。灵力微薄，法术生疏，面对浩如烟海的功法秘籍（<a href="https://tonybai.com/2025/07/14/writing-style-guide">API文档</a>），常常感到力不从心，一不小心就可能“走火入魔”（写出 Bug）。</p>
<ul>
<li><strong>境界特征：</strong>
<ul>
<li><strong>初窥门径，灵力微薄：</strong> 刚掌握一门或多门“功法”（Java/Python/Go），但理解不深。能写出基础的业务逻辑，但对底层原理一知半解，如同只会念咒却不知其所以然。</li>
<li><strong>修炼功法，打牢根基：</strong> 每日勤修不辍，疯狂“吸收灵石”（看文档、刷 LeetCode、学习框架）。主要任务是完成导师（Mentor）分配的“宗门任务”（小功能、Bug修复），以此换取修炼资源。</li>
<li><strong>依赖法器，难离其身：</strong> 严重依赖各种“低阶法器”，如 Stack Overflow、CSDN 和各类 AI 代码助手。一旦“法器”失灵（断网），便束手无策，战力大减。</li>
<li><strong>心魔与瓶颈：</strong> 最大的心魔是“我是不是不适合写代码”的自我怀疑。常常会遇到“瓶颈”，一个简单的 Bug 可能要耗费数日才能解决，此时急需一颗“筑基丹”（高人指点）方能突破。</li>
</ul>
</li>
</ul>
<h2>第二境：筑基期 &#8211; 合格的工程师</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-3.png" alt="" /><br />
<center>筑基期</center></p>
<p>经历无数次“走火入魔”后，终于炼化灵气，开辟丹田，成功“筑基”，体内的“灵力”（知识体系）凝聚成形。从此，你不再是修仙界的炮灰，而是一名真正的修士，可以独立执行任务，在宗门（团队）中有了一席之地。</p>
<ul>
<li><strong>境界特征：</strong>
<ul>
<li><strong>筑基成功，道途有望：</strong> 能够独立负责一个模块或一条业务线。对团队的技术栈了如指掌，是项目的中坚力量，道基稳固。</li>
<li><strong>拥有本命法器：</strong> 不再是见什么用什么，而是有了自己得心应手的“本命法器”（精通的框架或工具链），如 Spring 全家桶、Vue/React 生态。使用起来得心应手，威力倍增。</li>
<li><strong>神识初成，洞察秋毫：</strong> 开始具备一定的“神识”（Code Review 能力和设计嗅觉），能发现炼气期修士代码中的明显问题，并预见一些潜在的风险，如同神识外放，探查四周。</li>
<li><strong>独立执行宗门任务：</strong> 可以独立外出执行有一定难度的“宗门任务”（负责一个完整需求），并能顺利归来，不再需要师兄寸步不离地看护。</li>
</ul>
</li>
</ul>
<h2>第三境：结丹期 &#8211; 资深工程师 / 技术骨干</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-4.png" alt="" /><br />
<center>结丹期</center></p>
<p>此乃修行路上的巨大分水岭。修士将全身修为压缩、凝练，在丹田内结成一颗“金丹”（核心技术壁垒）。从此，寿元大增（职业生涯更稳定），神通广大，成为宗门里受人敬仰的长老级人物。</p>
<ul>
<li><strong>境界特征：</strong>
<ul>
<li><strong>凝结金丹，质的飞跃：</strong> 在某一领域（如高并发、分布式、数据库优化）形成了自己深厚的知识体系和方法论，这便是你的“金丹”。你是这个领域的 Go-to Person，是众人眼中可靠的“X哥”、“X姐”。</li>
<li><strong>本命法宝，威力大增：</strong> 不再满足于使用“法器”，开始炼制自己的“法宝”（轮子、工具库、脚手架），供宗门内弟子使用，极大提升了整个团队的战斗力。</li>
<li><strong>开辟洞府，传道授业：</strong> 开始承担起“长老”的职责，为宗门“开辟洞府”（搭建技术分享平台），“传道授业”（指导新人、进行技术培训），培养后辈力量，扩大自己的影响力。</li>
<li><strong>阵法大师，布局为先：</strong> 对小型系统的架构设计信手拈来，如同布置“阵法”，懂得权衡取舍，让系统在未来一段时间内稳固运行，易于扩展。</li>
</ul>
</li>
</ul>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<h2>第四境：元婴期 &#8211; 架构师 / 首席工程师</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-5.png" alt="" /><br />
<center>元婴期</center></p>
<p>碎丹成婴，道行进入全新天地。修士的“元婴”可以出窍，神游天外，对“天地法则”（系统规律）的理解远超常人。他们是宗门的守护神，轻易不出手，但一言一行都足以影响宗门的兴衰。</p>
<ul>
<li><strong>境界特征：</strong>
<ul>
<li><strong>元婴出窍，神游天外：</strong> 视角早已超越某个具体项目或业务线。他们的“元婴”（思想和影响力）可以“出窍”，俯瞰整个公司的技术体系，思考跨团队、跨领域的平台级问题。</li>
<li><strong>参悟天地法则：</strong> 深入理解分布式、高可用、可扩展性等“天地法则”。他们关注的不再是“术”（具体实现），而是“道”（设计哲学与原则），能在纷繁复杂的需求中，找到最核心的技术模型。</li>
<li><strong>开宗立派，影响一方：</strong> 他们设计的“护山大阵”（核心技术架构、平台），能支撑公司未来数年的发展。他们制定的“门规”（技术规范、研发流程），被众多弟子遵守，深刻影响着整个技术团队的文化和效率。</li>
<li><strong>趋吉避凶，未卜先知：</strong> 具备强大的技术预判能力，能洞察技术趋势，规避未来的技术债务和架构风险，带领宗门走在正确的“修行”道路上，避免误入歧途。</li>
</ul>
</li>
</ul>
<h2>第五境：化神期 &#8211; 技术大牛 / 领域开拓者</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/fanren-xiuxian-programmer-levels-6.png" alt="" /><br />
<center>化神期</center></p>
<p>此境界已是人界的传说，神龙见首不见尾。他们对“道”的理解已返璞归真，能够洞悉本源，甚至创造规则。他们的存在，本身就是一座无法逾越的高山，是无数修士仰望的目标。</p>
<ul>
<li><strong>境界特征：</strong>
<ul>
<li><strong>返璞归真，大道至简：</strong> 他们的言论和代码往往看起来平平无奇，却蕴含着对技术最深刻的理解。能用最简单的语言解释最复杂的原理，如同“大道至简”，一言一行皆是道法自然。</li>
<li><strong>言出法随，创造规则：</strong> 他们不再是规则的遵守者，而是规则的创造者。他们创造的某个开源框架（如 K8s, TensorFlow）、某篇论文（如 MapReduce, DynamoDB），可能开创一个时代，成为无数修士修行的“根本大法”。</li>
<li><strong>破碎虚空，飞升上界：</strong> 他们的影响力早已超越一家公司，成为整个行业的灯塔。他们可能在顶级技术会议上“讲道”，也可能在某个开源社区中“点化”众生。对他们而言，换个公司已不是“跳槽”，而是“破碎虚空”，去往另一个更广阔的世界（灵界）。</li>
</ul>
</li>
</ul>
<h2>小结：路漫漫其修远兮</h2>
<p>修仙之路，道阻且长，行则将至。</p>
<p>从炼气期的迷茫，到筑基期的坚定；从结丹期的突破，到元婴期的洞察，乃至化神期的传说。每一个境界，都离不开日复一日的“打坐”（学习）、一次又一次的“渡劫”（攻克难题），以及那么一点点“机缘”（好的项目和团队以及赛道）。</p>
<p>韩立资质平平，却凭着“勤奋”与“谨慎”二字，终成大道。我辈程序员，或许没有逆天资质，但只要心向大道，勤勉不怠，终有一日，也能突破瓶颈，得见真我。</p>
<p>那么，各位道友，你现在修炼到哪个境界了？在修行路上又遇到了哪些瓶颈或趣事？欢迎在评论区留下你的“道号”和境界，我们一同论道！</p>
<hr />
<p><strong>想系统学习Go，构建扎实的知识体系？</strong></p>
<p>我的新书《<a href="https://book.douban.com/subject/37499496/">Go语言第一课</a>》是你的首选。源自2.4万人好评的极客时间专栏，内容全面升级，同步至Go 1.24。首发期有专属五折优惠，不到40元即可入手，扫码即可拥有这本300页的Go语言入门宝典，即刻开启你的Go语言高效学习之旅！</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-primer-published-4.png" alt="" /></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; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>代码之外的必修课：顶级技术文档风格指南如何提升你的工程效率</title>
		<link>https://tonybai.com/2025/07/14/writing-style-guide/</link>
		<comments>https://tonybai.com/2025/07/14/writing-style-guide/#comments</comments>
		<pubDate>Mon, 14 Jul 2025 12:30:40 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[eslint]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[gofmt]]></category>
		<category><![CDATA[PR]]></category>
		<category><![CDATA[README.md]]></category>
		<category><![CDATA[Redhat]]></category>
		<category><![CDATA[UI]]></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=4904</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/07/14/writing-style-guide 大家好，我是Tony Bai。 作为一名开发者、架构师或运维专家，我们大部分时间都在与代码、系统和架构打交道。然而，我们同样在持续不断地进行另一种形式的“编码”——沟通编码。无论是撰写一个清晰的 README.md，提交一份详尽的 Pull Request 描述，编写项目内部的技术文档，还是在社区中回答一个问题，我们都在扮演着“技术作者”的角色。 代码的质量决定了软件能否运行，而沟通的质量则决定了项目能否高效协作、知识能否有效传承、社区能否健康发展。一份糟糕的文档，如同晦涩难懂的“面条代码”，会极大地消耗团队的精力和热情。 最近，Redhat公司发布了《Red Hat Technical Writing Style Guide》7.1版本。这份指南不仅仅是一系列规则的集合，它更像是一部由顶级开源软件公司沉淀下来的、关于如何通过清晰沟通来提升工程效率的哲学。 在这篇文章中，我将提炼其中的一些精髓，探讨那些能直接提升您和团队工程能力的写作原则，供大家参考。 写作的“第一性原理”：清晰、精确、用户至上 技术文档的首要目标是传递信息，任何模糊、冗长或模棱两可的表达都是工程效率的天敌。指南强调了几个核心原则： 1. 拥抱主动语态，指令明确无误 主动语态让指令更直接、更有力。在指导性文档中，这能显著降低读者的认知负荷。 不推荐 (被动语态) 推荐 (主动语态) Linuxconf can be started by typing &#8230; Type &#8230; to start Linuxconf. 新的配置可以被应用通过重启服务。 重启服务以应用新的配置。 对开发者的价值：当用户（或未来的你）阅读操作手册时，清晰的指令意味着更低的出错率和更快的解决问题速度。 2. 杜绝冗余，尊重读者的时间 避免使用不必要的填充词，让每一句话都言之有物。 冗余 精炼 Perform the installation of the product. Install the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/writing-style-guide-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/07/14/writing-style-guide">本文永久链接</a> &#8211; https://tonybai.com/2025/07/14/writing-style-guide</p>
<p>大家好，我是Tony Bai。</p>
<p>作为一名开发者、架构师或运维专家，我们大部分时间都在与代码、系统和架构打交道。然而，我们同样在持续不断地进行另一种形式的“编码”——<strong>沟通编码</strong>。无论是撰写一个清晰的 README.md，提交一份详尽的 Pull Request 描述，编写项目内部的技术文档，还是在社区中回答一个问题，我们都在扮演着“技术作者”的角色。</p>
<p>代码的质量决定了软件能否运行，而<strong>沟通的质量则决定了项目能否高效协作、知识能否有效传承、社区能否健康发展</strong>。一份糟糕的文档，如同晦涩难懂的“面条代码”，会极大地消耗团队的精力和热情。</p>
<p>最近，Redhat公司发布了《<a href="https://www.stylepedia.net/style/">Red Hat Technical Writing Style Guide</a>》7.1版本。这份指南不仅仅是一系列规则的集合，它更像是一部由顶级开源软件公司沉淀下来的、关于<strong>如何通过清晰沟通来提升工程效率</strong>的哲学。</p>
<p>在这篇文章中，我将提炼其中的一些精髓，探讨那些能直接提升您和团队工程能力的写作原则，供大家参考。</p>
<h2>写作的“第一性原理”：清晰、精确、用户至上</h2>
<p>技术文档的首要目标是传递信息，任何模糊、冗长或模棱两可的表达都是工程效率的天敌。指南强调了几个核心原则：</p>
<h3>1. 拥抱主动语态，指令明确无误</h3>
<p>主动语态让指令更直接、更有力。在指导性文档中，这能显著降低读者的认知负荷。</p>
<table>
<thead>
<tr>
<th align="left">不推荐 (被动语态)</th>
<th align="left"><strong>推荐 (主动语态)</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Linuxconf can be started by typing &#8230;</td>
<td align="left">Type &#8230; to start Linuxconf.</td>
</tr>
<tr>
<td align="left">新的配置<strong>可以被应用</strong>通过重启服务。</td>
<td align="left"><strong>重启服务</strong>以应用新的配置。</td>
</tr>
</tbody>
</table>
<p><strong>对开发者的价值</strong>：当用户（或未来的你）阅读操作手册时，清晰的指令意味着更低的出错率和更快的解决问题速度。</p>
<h3>2. 杜绝冗余，尊重读者的时间</h3>
<p>避免使用不必要的填充词，让每一句话都言之有物。</p>
<table>
<thead>
<tr>
<th align="left">冗余</th>
<th align="left"><strong>精炼</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Perform the installation of the product.</td>
<td align="left">Install the product.</td>
</tr>
<tr>
<td align="left">This problem is located on the /dev/sda1 partition.</td>
<td align="left">This problem is on the /dev/sda1 partition.</td>
</tr>
</tbody>
</table>
<h3>3. 避免歧义：This 指的是什么？</h3>
<p>在技术文档中，代词（如 this, that, it）是歧义的重灾区，尤其对于翻译和非母语阅读者。指南建议明确指出代词所指代的的名词。</p>
<pre><code>- A site can use these to self-assign a private routable IP address space.
+ A site can use these unique local addresses to self-assign a private routable IP address space.

- This causes SSH to lose the recorded identities.
+ This action causes SSH to lose the recorded identities.
</code></pre>
<p><strong>对开发者的价值</strong>：在复杂的配置说明或问题排查指南中，消除代词歧义可以防止因误解而导致的配置错误。</p>
<h2>为全球化社区而写：包容性与可翻译性</h2>
<p>开源项目和现代技术团队本质上是全球化的。我们的文档需要被不同文化背景的人阅读和翻译。</p>
<h3>1. 使用包容性语言</h3>
<p>这是现代技术社区的基石。避免使用可能带有偏见或冒犯性的术语，有助于建立一个更健康、更多元化的社区环境。</p>
<ul>
<li><strong>master/slave</strong> -> 推荐使用 primary/replica, controller/worker, leader/follower 等。</li>
<li><strong>whitelist/blacklist</strong> -> 推荐使用 allowlist/denylist 或 blocklist。</li>
<li><strong>性别代词</strong> -> 避免使用 he/she，推荐使用中性的 they（可指代单数）或直接使用第二人称 you。</li>
</ul>
<h3>2. 为翻译而设计</h3>
<p>糟糕的措辞会给机器翻译和人工翻译带来灾难。一些简单的规则可以极大地提升文档的可翻译性：</p>
<ul>
<li><strong>避免使用俚语和行话</strong>：eat your own dogfood (使用自己的产品), boil the ocean (范围过大) 等表达在其他文化中可能完全无法理解。</li>
<li><strong>慎用 may 和 should</strong>：may 可能表示“可能性”或“许可”，should 可能表示“建议”或“期望”。使用 can (可以), might (可能), must (必须) 会更精确。</li>
<li><strong>避免名词堆叠</strong>：Standard system log management configuration 这种连续名词的组合，在翻译时极易出错。可以调整为 Standard configuration of system log management。</li>
</ul>
<h2>工程师的文字“代码规范”：一致性与标准化</h2>
<p>如同 eslint 或 gofmt 为代码提供规范一样，风格指南为我们的文字提供了“格式化”标准。这能确保整个项目文档风格统一，易于阅读和维护。</p>
<h3>1. 统一命令语法文档</h3>
<p>在展示命令行示例时，保持一致的格式至关重要。</p>
<pre><code class="bash"># 一个清晰的命令语法示例
$ git clone [username@]hostname:/repository_filename [directory]
</code></pre>
<pre><code>- 使用 $ 表示普通用户，# 表示 root 用户。
- 使用 [] 表示可选参数。
- 使用斜体或描述性词语（如 _filename_）表示 需替换的值。
- 在需要省略输出时，使用 ...output omitted... 标记，而不是随意删减。
</code></pre>
<h3>2. 精确描述 UI 元素</h3>
<p>当描述用户界面时，精确和简洁是关键。</p>
<ul>
<li><strong>直接了当</strong>：不说 Click the Save button，而说 Click <strong>Save</strong>。</li>
<li><strong>名称匹配</strong>：文档中的 UI 元素名称（如按钮、菜单项）应与界面上显示的<strong>完全一致</strong>（包括大小写）。</li>
<li><strong>导航路径</strong>：使用 -> 或 →清晰地表示导航路径，例如：Go to Monitoring → Metrics。</li>
</ul>
<h3>3. 避免产品名称的所有格</h3>
<p>一个看似微小但能提升专业度的细节：</p>
<ul>
<li><strong>不推荐</strong>: Red Hat OpenShift&#8217;s Logging operator creates&#8230;</li>
<li><strong>推荐</strong>: The Red Hat OpenShift Logging operator creates&#8230;</li>
</ul>
<h2>总结与展望：将沟通视为工程技艺</h2>
<p>《红帽风格指南》带给我们的最大启示是：<strong>清晰、精确、专业的书面沟通不是一种“软技能”，而是工程技艺（Craftsmanship）不可或缺的一部分</strong>。它与编写高质量代码、设计健壮架构同等重要。</p>
<p>下一次，当你准备提交一个 Pull Request、更新一份 README，或撰写一篇技术博客时，不妨尝试运用其中的一两个原则：</p>
<ul>
<li>将一个被动语态的句子改为主动语态。</li>
<li>检查是否有模糊的代词 it 或 this 可以被替换。</li>
<li>思考一下你使用的术语是否足够包容和全球通用。</li>
</ul>
<p>投资于沟通，就是投资于整个团队的效率和项目的未来。正如一份优雅的代码令人赏心悦悦目，一份清晰的文档同样能带来极致的工程之美。</p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></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; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/07/14/writing-style-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
