<?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; TIOBE</title>
	<atom:link href="http://tonybai.com/tag/tiobe/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Mon, 20 Apr 2026 23:16:50 +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>Rust 还没进前十，TIOBE 就开始唱衰了？</title>
		<link>https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype/</link>
		<comments>https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype/#comments</comments>
		<pubDate>Thu, 16 Apr 2026 23:36:54 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[BorrowChecker]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[LearningCurve]]></category>
		<category><![CDATA[MemorySafety]]></category>
		<category><![CDATA[ownership]]></category>
		<category><![CDATA[PaulJansen]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[ProgrammingLanguageRankings]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SearchEngines]]></category>
		<category><![CDATA[SearchVolume]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[SurvivorBias]]></category>
		<category><![CDATA[SystemProgramming]]></category>
		<category><![CDATA[TIOBE]]></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=6190</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype 大家好，我是Tony Bai。 过去几年，技术圈最热门的“猜谜游戏”之一，就是预测 Rust 什么时候能杀入 TIOBE 排行榜的前十。 这门被誉为“天选之子”的语言，连续多年霸榜 Stack Overflow“最受喜爱”的宝座，被微软、亚马逊等巨头奉为重写底层基础设施的“银弹”。所有人都觉得，它冲进前十，只是时间问题。 但就在最近，TIOBE 指数发布了 2026 年 4 月的最新排名。 榜单本身平平无奇，Rust 的排名甚至还从去年同期的 18 位微升到了 今年的16 位。 然而，TIOBE 的 CEO Paul Jansen 亲自撰写的一篇社论，却像一盆冷水，劈头盖脸地浇在了所有 Rustacean（Rust 开发者）的头上。 Paul Jansen 用极其明确的措辞，给这门甚至还没来得及摸到前十门槛的语言，提前下了一份“病危通知书”： “Rust 的崛起显示出放缓的迹象。……它进入前十的梦想，现在看来比以前更加遥远了。” 这篇社论，瞬间引爆了全网的讨论。 无数 Rust 开发者感到匪夷所思，甚至有些愤怒：我们还没真正发力，你怎么就开始唱衰了？ 这背后，到底是 TIOBE 对技术趋势的精准预判，还是这把统治了我们十几年的“认知标尺”，已经彻底失灵了？ 今天，我们就来扒开这张榜单的底裤，看看在喧嚣的数据背后，Rust 的真实处境，究竟是怎样的。 官方的“诊断书”：Rust 的“阿喀琉斯之踵” 我们先来看看 TIOBE CEO Paul Jansen 的“诊断报告”。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/tiobe-ranking-and-the-decline-of-rust-hype-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype">本文永久链接</a> &#8211; https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype</p>
<p>大家好，我是Tony Bai。</p>
<p>过去几年，技术圈最热门的“猜谜游戏”之一，就是预测 Rust 什么时候能杀入 TIOBE 排行榜的前十。</p>
<p>这门被誉为“天选之子”的语言，连续多年霸榜 Stack Overflow“最受喜爱”的宝座，被微软、亚马逊等巨头奉为重写底层基础设施的“银弹”。所有人都觉得，它冲进前十，只是时间问题。</p>
<p>但就在最近，TIOBE 指数发布了 2026 年 4 月的最新排名。</p>
<p>榜单本身平平无奇，Rust 的排名甚至还从去年同期的 18 位微升到了 今年的16 位。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/tiobe-ranking-and-the-decline-of-rust-hype-2.png" alt="" /></p>
<p>然而，TIOBE 的 CEO Paul Jansen 亲自撰写的一篇社论，却像一盆冷水，劈头盖脸地浇在了所有 Rustacean（Rust 开发者）的头上。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/tiobe-ranking-and-the-decline-of-rust-hype-3.png" alt="" /></p>
<p>Paul Jansen 用极其明确的措辞，给这门甚至还没来得及摸到前十门槛的语言，提前下了一份“病危通知书”：</p>
<blockquote>
<p><strong>“Rust 的崛起显示出放缓的迹象。……它进入前十的梦想，现在看来比以前更加遥远了。”</strong></p>
</blockquote>
<p>这篇社论，瞬间引爆了全网的讨论。</p>
<p>无数 Rust 开发者感到匪夷所思，甚至有些愤怒：<strong>我们还没真正发力，你怎么就开始唱衰了？</strong></p>
<p>这背后，到底是 TIOBE 对技术趋势的精准预判，还是这把统治了我们十几年的“认知标尺”，已经彻底失灵了？</p>
<p>今天，我们就来扒开这张榜单的底裤，看看在喧嚣的数据背后，Rust 的真实处境，究竟是怎样的。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/agentic-api-in-action-qr.png" alt="" /></p>
<h2>官方的“诊断书”：Rust 的“阿喀琉斯之踵”</h2>
<p>我们先来看看 TIOBE CEO Paul Jansen 的“诊断报告”。</p>
<p>他指出，Rust 在今年年初曾一度冲到历史最高排名第 13 位，但仅仅三个月后，就又跌回了第 16 位。</p>
<p>他给出的解释是：</p>
<blockquote>
<p>“一个可能的解释是，尽管 Rust 能够生产出高效和安全的代码，但对于非专家程序员来说，它仍然<strong>难以学习</strong>。虽然专家们愿意投入时间去掌握这门语言，但更广泛的主流采用似乎面临着更大的挑战。”</p>
</blockquote>
<p>这段话，精准地戳中了 Rust 社区最敏感、也最引以为傲的那根神经——<strong>陡峭的学习曲线</strong>。</p>
<p>为了追求极致的内存安全，Rust 发明了极其复杂的“所有权（Ownership）”和“借用检查（Borrow Checker）”系统。这套系统像一个极其严苛的导师，在你编译代码的每一个环节，都对你进行着灵魂拷问。</p>
<p>无数新手在入门 Rust 时，都会经历一段被称为“与编译器搏斗”的痛苦时期。</p>
<p>TIOBE 的观点很明确：<strong>这种“精英主义”的设计哲学，正在成为 Rust “出圈”的最大障碍。</strong></p>
<h2>榜单的原罪：用“百度指数”去衡量火箭科学</h2>
<p>TIOBE 的诊断听起来似乎很有道理。但我们必须先问一个更底层的问题：<strong>TIOBE 指数，到底是个什么东西？</strong></p>
<p>TIOBE 的排名，本质上是一个基于<strong>“搜索引擎查询量”</strong>的指标。它在全球 25 个主流搜索引擎上，统计包含 +”<language> programming” 关键词的页面数量。</p>
<p>看懂了吗？这套诞生于 十多年前的评判标准，在 2026 年的今天，已经<a href="https://tonybai.com/2025/11/14/the-go-ecosystem-in-2025/">变得极其荒谬</a>。</p>
<p>它衡量的是一门语言在公网上的“话题度”和“声量”，而不是它的“真实价值”和“商业应用”。</p>
<p>这就像用“微博热搜”的次数，去评判一位科学家的学术贡献一样可笑。</p>
<p>用这把“旧尺子”去衡量现代编程语言，会产生几个致命的认知偏差：</p>
<p><strong>1. 越是难学、坑越多的语言，排名越高。</strong></p>
<p>这恰恰是 TIOBE 逻辑最诡异的地方。Paul Jansen 一边抱怨 Rust 太难学，一边却忽视了，正是因为“难学”，新用户才会频繁地去 Google 搜索“Rust a lifetime that lives long enough”、“the trait Borrow is not implemented for String”这些令人抓狂的报错信息。</p>
<p>每一次“救命”的搜索，都在为 Rust 的 TIOBE 排名，贡献着宝贵的 KPI。</p>
<p><strong>2. 越是成熟、生态完善的语言，排名越吃亏。</strong></p>
<p>随着一门语言的成熟，它的文档会越来越完善，社区的最佳实践会沉淀下来。开发者遇到的问题，更多地会在官方文档、IDE 提示、或者小圈子的 Slack/Discord 里被解决，而不会产生大量的公开搜索。</p>
<p>没有问题，就没有搜索。没有搜索，就没有 TIOBE 排名。</p>
<p><strong>3. TIOBE 无法衡量“生态位”的价值。</strong></p>
<p>Rust 的江山在哪里？在 Linux 内核里(注：最近发布的Linux Kernel 7.0里，<a href="https://www.fosslinux.com/154929/linux-kernel-7-0-new-features.htm">Rust已经正式转正了</a>！)，在 Windows 的系统组件里，在 Cloudflare 的边缘网络里，在 Figma 的渲染引擎里，在那些对性能和安全要求达到极致的底层基础设施里。</p>
<p>这些领域的开发者，是金字塔尖的系统程序员。他们讨论问题，是在 GitHub Issue、Zulip 频道，而不是在 CSDN 上问“我的 &amp;mut 为什么传不进去”。</p>
<p>Rust 的价值，深藏在那些不会产生大量公开搜索记录的、高壁垒的硬核场景里。而 TIOBE 的爬虫，可能永远也爬不到那里。</p>
<h2>真实的版图：Rust 正在经历一场“青春期的烦恼”</h2>
<p>扒开 TIOBE 的“障眼法”，我们该如何客观看待 Rust 在 2026 年的真实处境？</p>
<p><strong>Rust 并没有“增长放缓”，它只是在经历一场必然的“出圈阵痛”。</strong></p>
<p>任何一门新技术的发展，都会经历两个阶段：</p>
<ol>
<li><strong>从 0 到 1 的“深耕期”</strong>：吸引最硬核、最狂热的一批早期用户，在特定的垂直领域里，将自己的核心优势打磨到极致。Rust 在“系统编程”领域，已经完美地完成了这个阶段。</li>
<li><strong>从 1 到 N 的“出圈期”</strong>：试图将自己的影响力，扩展到更广阔的领域，吸引更多的主流开发者。</li>
</ol>
<p>Rust 现在正处于从阶段一向阶段二过渡的关键时期。它那套为系统编程量身打造的、极致安全的内存管理哲学，在 Web 开发、数据科学、GUI 应用等场景下，确实给很多开发者带来了巨大的心智负担。</p>
<p>Rust 社区内部，关于是否应该为了“易用性”而牺牲部分“极致性”的争论，也从未停止。比如，关于异步运行时的分裂（Tokio vs async-std）、关于<a href="https://tonybai.com/2026/04/09/stop-being-small-and-beautiful-rust-petition-to-learn-from-go">标准库的精简与扩充</a>，都反映了这种“青春期的烦恼”。</p>
<p><strong>Rust 没有停滞，它只是在“成长的十字路口”，在思考自己到底想成为谁。</strong></p>
<h2>我们真正应该关注什么？</h2>
<p>作为身处一线的工程师，我们应该如何看待 TIOBE 的这份“诊断书”？</p>
<p><strong>第一，永远不要把“流行度”作为技术选型的唯一标准。</strong></p>
<p>JavaScript 很流行，但你不会用它去写操作系统内核。COBOL 极其冷门，但全球的银行系统依然跑在它上面，顶级 COBOL 程序员的薪资高得吓人。</p>
<p><strong>技术的价值，永远取决于它在特定场景下，解决了多大规模、多高难度的商业问题。</strong></p>
<p><strong>第二，警惕“易用性”的陷阱。</strong></p>
<p>Go、Python 很简单。但这种简单，可能是以牺牲“运行时安全保证”（比如Python 的动态类型、Go的Nil指针等）为代价的。</p>
<p>Rust 的“难”，恰恰是把所有可能在深夜引发线上雪崩的风险，全部前置到了编译阶段。它用“编译时的痛苦”，换取了“运行时的安宁”。</p>
<p>这种设计哲学，对于金融交易、底层基础设施、航空航天等“不容有失”的领域来说，是无价之宝。</p>
<p><strong>第三，对自己的成长负责，而不是对榜单负责。</strong></p>
<p>与其每个月焦虑地刷新 TIOBE 的排名，不如去问自己几个更本质的问题：</p>
<ul>
<li>我所处的行业，未来 3-5 年最核心的技术瓶颈是什么？</li>
<li>为了解决这些瓶颈，我需要掌握哪些不可替代的底层能力？</li>
<li>哪门语言的生态和哲学，与这个方向最契合？</li>
</ul>
<p><strong>你的技术护城河，从来不是由 TIOBE 的排名决定的，而是由你所处行业以及要解决问题的深度决定的。</strong></p>
<h2>小结：你的价值，与榜单无关</h2>
<p>TIOBE 的这份榜单，与其说是一份严肃的技术报告，不如说是一场成功的“引流狂欢”。</p>
<p>它用一个看似客观的数据，精准地挑动了每个程序员心中最敏感的那根“身份焦虑”神经。</p>
<p>但作为身处一线的工程师，我们必须保持清醒。</p>
<p><strong>衡量一门技术价值的唯一标准，从来不是它在搜索引擎上的热度，而是它在真实的商业世界里，解决了多大、多复杂、多有价值的问题。</strong></p>
<p>当你在用 Rust 构建着下一代安全操作系统，或者用它重写着公司最核心的交易引擎时，你根本无需关心 TIOBE 上的排名是 16 还是 60。</p>
<p>因为你正在创造的价值，早已不是这些过时的“声量指标”所能衡量的。</p>
<p><strong>你的技术栈没有背叛你，但你的认知，可能会。</strong></p>
<hr />
<p><strong>今日互动探讨：</strong></p>
<p>你觉得 TIOBE 对 Rust“增长放缓”的判断准确吗？你认为 Rust 陡峭的学习曲线，是它最大的优势，还是最大的障碍？</p>
<p>欢迎在评论区分享你的看法！</p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>离了大谱！Go 一年之内从第 7 掉到第 16</title>
		<link>https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year/</link>
		<comments>https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year/#comments</comments>
		<pubDate>Sat, 10 Jan 2026 00:19:34 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AISearch]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[deepseek]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[GitHubOctoverse]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[ObjectPascal]]></category>
		<category><![CDATA[Ranking]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Stackoverflow]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[VisualBasic]]></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=5699</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year 大家好，我是Tony Bai。 新年伊始，TIOBE 发布了最新的编程语言排行榜。当我满怀期待地去寻找 Go 的身影时，差点以为自己眼花了： Go 居然从去年的第 7 名，断崖式下跌到了第 16 名！ 占比跌幅高达 1.37%，在这个榜单上几乎是“崩盘”级别的表现。 这是什么概念？这意味着在 TIOBE 的统计里，Go 现在的流行度还不如 Delphi/Object Pascal（第 9 名）和 Visual Basic（第 7 名）。 这就很离谱了。任何一个在 2025 年还在写代码的人，都不会觉得 Go 的生态已经萎缩到这种地步。 是 Go真的凉了吗？还是 TIOBE 的算法“疯”了？ 平行宇宙：稳如泰山的 Go 为了验证我的认知是否出现了偏差，我特意查阅了 2025 年其他的权威榜单： GitHub Octoverse：Go 依然稳居前 10，云原生领域的统治地位不可撼动。 Stack Overflow 开发者调查：Go 在“最想学习的语言”和“薪资最高语言”中依然名列前茅。 JetBrains 生态报告：Go 开发者的数量在持续稳步增长，并登顶“最受期待”榜首，没有任何衰退迹象。 全世界都觉得 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/go-dropped-from-7th-to-16th-in-one-year-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year">本文永久链接</a> &#8211; https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year</p>
<p>大家好，我是Tony Bai。</p>
<p>新年伊始，TIOBE 发布了最新的编程语言排行榜。当我满怀期待地去寻找 Go 的身影时，差点以为自己眼花了：</p>
<p><strong>Go 居然从去年的第 7 名，断崖式下跌到了第 16 名！</strong> 占比跌幅高达 1.37%，在这个榜单上几乎是“崩盘”级别的表现。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/go-dropped-from-7th-to-16th-in-one-year-2.png" alt="" /></p>
<p>这是什么概念？这意味着在 TIOBE 的统计里，Go 现在的流行度还不如 <strong>Delphi/Object Pascal</strong>（第 9 名）和 <strong>Visual Basic</strong>（第 7 名）。</p>
<p>这就很离谱了。任何一个在 2025 年还在写代码的人，都不会觉得 Go 的生态已经萎缩到这种地步。</p>
<p>是 Go真的凉了吗？还是 TIOBE 的算法“疯”了？</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/distributed-system-guide-qr.png" alt="img{512x368}" /></p>
<h2>平行宇宙：稳如泰山的 Go</h2>
<p>为了验证我的认知是否出现了偏差，我特意查阅了 2025 年其他的权威榜单：</p>
<ul>
<li>GitHub Octoverse：Go 依然稳居前 10，云原生领域的统治地位不可撼动。</li>
<li><a href="https://tonybai.com/2025/06/20/redmonk-index-2025-jan/">Stack Overflow 开发者调查</a>：Go 在“最想学习的语言”和“薪资最高语言”中依然名列前茅。</li>
<li><a href="https://tonybai.com/2025/10/23/go-language-leads-jetbrains-trends">JetBrains 生态报告</a>：Go 开发者的数量在持续稳步增长，并<a href="https://tonybai.com/2025/10/23/go-language-leads-jetbrains-trends">登顶“最受期待”榜首</a>，没有任何衰退迹象。</li>
</ul>
<p>全世界都觉得 Go 挺好，唯独 TIOBE 觉得 Go 要完。这种巨大的反差，逼得我不得不去扒一扒 TIOBE 的底裤——它的排名算法到底是怎么算的？</p>
<h2>扒皮 TIOBE：一个过时的算法游戏</h2>
<p>根据 <a href="https://www.tiobe.com/tiobe-index/programminglanguages_definition">TIOBE 官方公布的定义文档</a>，它的算法极其简单粗暴，甚至可以说——<strong>在 2026 年显得有些可笑</strong>。</p>
<p>它的核心逻辑只有一个公式：</p>
<p><strong>在 25 个主流搜索引擎中，搜索 +”<language> programming”，统计返回的页面数量。</strong></p>
<p>就是这么简单。没有什么复杂的加权，没有什么开发者活跃度分析，就是数一数搜索引擎告诉你“有多少个网页提到了这个语言”。</p>
<p>这种算法在 20 年前或许有效，但在今天，它成为了导致 Go 排名暴跌的元凶。</p>
<h3>元凶一：AI 杀死了“搜索结果页”</h3>
<p>2025 年最大的变化是什么？是 <strong>AI Search</strong>。</p>
<p>当我们遇到编程问题时，越来越多的人不再去 Google 翻阅那几百万个搜索结果页面，而是直接问 ChatGPT、Claude 或者 DeepSeek。<br />
<strong>TIOBE 明确表示：ChatGPT 等 AI 工具不被纳入统计，因为它们没有“返回结果数量”的计数器。</strong></p>
<p>这就导致了一个悖论：<strong>越是热门、现代的语言（如 Go、Python(得益于AI模型训练与应用开发)），其用户群体越年轻、越拥抱新技术，也就越倾向于用 AI 解决问题。</strong> 这直接导致了这些语言在传统搜索引擎中的“查询热度”和“新内容生成量”出现显著下降。</p>
<p>相比之下，那些老旧的语言（如 VB、Delphi），其用户群体相对固化，且维护遗留系统时更多依赖传统的文档和论坛搜索，因此受到的冲击较小，甚至在对比中显得“逆势上扬”。</p>
<blockquote>
<p>注：Python的占比相对于2025.01也下降了0.68%。</p>
</blockquote>
<h3>元凶二：Go 的名字太“吃亏”了</h3>
<p>TIOBE 的核心搜索查询是 +”<language> programming”。</p>
<p>这对于 Python、Java 这种专有名词来说问题不大。但对于 <strong>Go</strong> 来说，这就是个灾难。</p>
<ul>
<li><strong>通用词的悲剧</strong>：Go 是一个极其通用的英语单词。为了过滤掉“去（go）”的含义，TIOBE 必须强制加上 “programming” 后缀。</li>
<li><strong>搜索习惯的改变</strong>：但在 2025 年，开发者还会搜 “Go programming” 吗？不会了。大家搜的是 “Go generics”、”Golang k8s”、”Goroutine leak”。</li>
<li><strong>不成比例的过滤</strong>：随着搜索引擎算法日益智能，它开始更精准地理解用户意图，不再机械地匹配 “Go programming” 这个短语。这导致大量讨论 Go 技术的高质量页面（但没有显式包含该短语）被 TIOBE 的简单算法无情过滤。而像 “Python programming” 这种组合，因为 Python 本身的高辨识度，受到的影响要小得多。</li>
</ul>
<h3>元凶三：搜索引擎的“去水化”</h3>
<p>Google 等搜索引擎在 2025 年大幅调整了算法，致力于打击 SEO 内容农场和低质量生成的页面。</p>
<p>Go 作为一个在云原生时代极速窜红的语言，过去几年充斥着大量的入门教程、培训班广告和搬运文章。搜索引擎的这一波“清洗”，可能<strong>不成比例地删除了大量包含 “Go programming” 关键词的低质、重复页面</strong>。</p>
<p><strong>虽然页面总量少了，但生态的“干货密度”其实更高了。</strong> 然而，在 TIOBE 这种只看“数量”不看“质量”的算法眼里，这就被简单粗暴地解读为“热度暴跌”。而那些生态早已固化、鲜有新内容产生的老语言，反而躲过了这一劫。</p>
<blockquote>
<p>注：以上也是笔者的主观分析，不一定与事实相符！</p>
</blockquote>
<h2>小结：看个乐呵就行</h2>
<p>把 Go 排在 Visual Basic 后面，这本身就是一个笑话。</p>
<p>TIOBE 的这次排名暴跌，反映的不是 Go 语言的衰落，而是 <strong>TIOBE 这种基于“网页搜索量”的统计方法，在 AI 和现代互联网面前的全面崩塌。</strong></p>
<p>它就像一个依然在用“收音机收听率”来衡量流行音乐热度的老人，已经无法捕捉流媒体时代的脉搏。</p>
<p>所以，各位 Gopher，该写代码写代码，该摸鱼摸鱼。Go 好着呢，别被这个离谱的排名吓到了。</p>
<hr />
<p><strong>你的“体感”排名</strong></p>
<p>TIOBE 的数据确实让人啼笑皆非。<strong>在你心目中，Go 语言现在的真实热度应该排第几？你觉得还有哪个榜单能更客观地反映编程语言的现状？</strong></p>
<p><strong>欢迎在评论区晒出你的“心选榜单”，或者尽情吐槽这个离谱的排名！</strong></p>
<p><strong>如果这篇文章解开了你心中的疑惑，别忘了点个【赞】和【在看】，并转发给那些正在唱衰 Go 的朋友，打脸要快！</strong></p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的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/10/go-dropped-from-7th-to-16th-in-one-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go 跌出 TIOBE 前十？别被排名骗了，这才是它的真实地位</title>
		<link>https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language/</link>
		<comments>https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language/#comments</comments>
		<pubDate>Wed, 10 Dec 2025 23:19:23 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[CI/CD]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[cloudnative]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[machinelearning]]></category>
		<category><![CDATA[Melkey]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[PyTorch]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Stackoverflow]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[WebServices]]></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=5512</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language 大家好，我是Tony Bai。 Go 语言是否已经触到了天花板？在 Python 借力 AI 狂飙突进、Rust 备受追捧的今天，Go 的位置究竟在哪里？近日，Twitch工程师 Melkey 结合 JetBrains、Stack Overflow 以及 GitHub 的最新数据，发布了一份关于 Go 语言现状的深度分析。结论或许并不全是“好消息”，但却极其真实地反映了 Go 在工业界的稳固地位。 谁在用 Go？—— “云原生土著”的画像 JetBrains 的年度报告揭示了 Go 开发者的主要分布领域。数据显示，排名前三的应用场景分别是： Web 服务（无 GUI） 网站后端 云服务与基础设施 Melkey指出，尤其是第三点——云服务，最能代表 Go 的核心竞争力。这与行业内的普遍印象高度一致：专业的 Go 开发者往往不仅仅是在编写业务逻辑，更多时候是在与 Kubernetes 集群、微服务架构、CI/CD 管道以及各类 CLI 工具打交道。 如果说 Python 是数据科学的通用语，那么 Go 已经牢牢确立了自己作为“云时代 C 语言”的地位——它是构建现代基础设施的首选工具。 新手不再爱 Go？—— [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/is-golang-still-a-growing-programming-language-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language">本文永久链接</a> &#8211; https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language</p>
<p>大家好，我是Tony Bai。</p>
<p>Go 语言是否已经触到了天花板？在 Python 借力 AI 狂飙突进、Rust 备受追捧的今天，Go 的位置究竟在哪里？近日，<a href="https://tonybai.com/2025/07/04/everything-i-did-to-become-an-expert-in-golang">Twitch工程师 Melkey</a> 结合 <a href="https://tonybai.com/2025/11/14/the-go-ecosystem-in-2025/">JetBrains</a>、Stack Overflow 以及 GitHub 的最新数据，发布了<a href="https://www.youtube.com/watch?v=QjGduiCFHY4">一份关于 Go 语言现状的深度分析</a>。结论或许并不全是“好消息”，但却极其真实地反映了 Go 在工业界的稳固地位。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/api-design-pattern-and-implementation-qr.png" alt="" /></p>
<h2>谁在用 Go？—— “云原生土著”的画像</h2>
<p><a href="https://tonybai.com/2025/11/14/the-go-ecosystem-in-2025/">JetBrains 的年度报告</a>揭示了 Go 开发者的主要分布领域。数据显示，排名前三的应用场景分别是：</p>
<ol>
<li><strong>Web 服务（无 GUI）</strong></li>
<li><strong>网站后端</strong></li>
<li><strong>云服务与基础设施</strong></li>
</ol>
<p>Melkey指出，尤其是第三点——<strong>云服务</strong>，最能代表 Go 的核心竞争力。这与行业内的普遍印象高度一致：专业的 Go 开发者往往不仅仅是在编写业务逻辑，更多时候是在与 Kubernetes 集群、微服务架构、CI/CD 管道以及各类 CLI 工具打交道。</p>
<p>如果说 Python 是数据科学的通用语，那么 Go 已经牢牢确立了自己作为<strong>“<a href="https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/">云时代 C 语言</a>”</strong>的地位——它是构建现代基础设施的首选工具。</p>
<h2>新手不再爱 Go？—— 一个值得注意的信号</h2>
<p>在解读 Stack Overflow 2025 开发者调查时，Melkey敏锐地发现了一个略显尴尬的趋势。</p>
<p>虽然在所有受访者中，Go 的使用率约为 <strong>16.4%</strong>，但在<strong>“正在学习编程的人”</strong>（Learning to Code）这一群体中，Go 的排名出现了显著下滑。绝大多数编程新手的入门首选依然是 Python 或 JavaScript。</p>
<p>然而，这并不意味着 Go 的衰落。相反，数据显示，在<strong>“专业开发者”</strong>群体中，Go 的使用率上升到了 <strong>17%</strong>。</p>
<p>Melkey分析认为，这意味着 Go 正逐渐成为一种<strong>“第二语言”</strong>。它不再是很多人的“初恋”语言，而是开发者在掌握了编程基础后，为了追求高性能、高并发和工程化能力而进阶选择的“成熟伴侣”。</p>
<h2>薪资高，但别被“头衔”骗了</h2>
<p>分享中提到，在美国，Go 开发者的年薪上限可达 <strong>50 万美元</strong>，平均薪资也极具竞争力。</p>
<p>但Melkey对此提出了冷静的见解。他指出，如果在 LinkedIn 等招聘平台上搜索，会发现纯粹招募“Golang Developer”的岗位并没有想象中那么多。大多数高薪岗位实际上招募的是<strong>“资深后端工程师”</strong>或<strong>“云基础设施专家”</strong>。</p>
<p>这传递了一个明确的信号：市场不缺会写 if err != nil 的程序员，缺的是懂分布式系统、懂架构、能解决复杂问题，并且<strong>恰好使用 Go 作为工具</strong>的工程师。真正值钱的不是 Go 的语法，而是用 Go 解决工程问题的能力。</p>
<h2>TIOBE 排名下滑 vs GitHub 活跃度上升</h2>
<p>数据层面出现了一个有趣的“冲突”。</p>
<p>在老牌的 TIOBE 指数2025年11月份数据中，Go 从去年的第 7 名下滑至今年的 <strong>第 11 名</strong>，跌出了前十。这似乎是一个危险的信号。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/is-golang-still-a-growing-programming-language-2.png" alt="" /></p>
<p>但如果转向 GitHub 的数据，Go 依然是<strong>开源项目活动增长最快的前三名语言</strong>（仅次于 Python 和 TypeScript）。GitHub 的趋势图显示，Go 的生态活跃度保持着陡峭的上升曲线，没有减速迹象。</p>
<p>Melkey认为，TIOBE 可能反映了大众搜索的热度，但 GitHub 反映的是<strong>开发者用脚投票</strong>的结果。Go 的生态依然在蓬勃发展，只是不再像早期那样具有话题性和炒作度，而是进入了成熟期和深耕期。</p>
<h2>AI 时代：Go 是“铲子商”，不是“淘金者”</h2>
<p>在 AI 席卷全球的当下，Go 的位置在哪里？Melkey给出了精准的定位：<strong>“Go 在构建 AI 基础设施方面表现出色，但缺乏原生的机器学习解决方案。”</strong></p>
<p>Melkey结合自己在 Twitch 构建 ML 基础设施的经历印证了这一点：在 AI 领域，Python 用于模型训练（得益于 PyTorch, TensorFlow 等库），而 Go 则用于<strong>部署模型、构建大规模并发的推理服务</strong>以及搭建底层的 <strong>ML 基础设施</strong>。</p>
<p>Go 不会取代 Python 成为 AI 训练的语言，但在 AI 落地、服务化、工程化的“最后一公里”，Go 是绝对的主力。</p>
<h2>小结：Go 的未来是“稳态”</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/is-golang-still-a-growing-programming-language-3.png" alt="" /></p>
<p>基于上述数据，Melkey给出了自己的最终结论：</p>
<p><strong>Go 不会消失，但也别指望它能像火箭一样再次爆发式增长。</strong></p>
<p>它不会取代 Python 或 TypeScript 成为统治一切的通用语言。它正在进入一个<strong>“稳态”</strong>。在云原生、后端服务和基础设施领域，Go 已经建立了坚不可摧的壁垒。对于追求职业发展的工程师而言，它依然是一个稳定、高效且回报丰厚的选择。</p>
<p>Go 的未来，或许不再是“无处不在”，但注定是<strong>“不可或缺”</strong>。</p>
<p>资料链接：https://www.youtube.com/watch?v=QjGduiCFHY4</p>
<hr />
<p><strong>你的体感如何？</strong></p>
<p>数据是宏观的，但体感是微观的。</p>
<p>在你所在的公司或团队，Go 语言的使用是在扩张还是收缩？你认为 Go 在 AI 时代最大的机会是什么？</p>
<p>欢迎在评论区分享你的观察，让我们一起拼凑出更真实的 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>你的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/11/is-golang-still-a-growing-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从线下到线上，我的“Go语言进阶课”终于在极客时间与大家见面了！</title>
		<link>https://tonybai.com/2025/05/12/go-advanced-course/</link>
		<comments>https://tonybai.com/2025/05/12/go-advanced-course/#comments</comments>
		<pubDate>Mon, 12 May 2025 00:33:56 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Channel]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gopherchina]]></category>
		<category><![CDATA[GopherCon]]></category>
		<category><![CDATA[goroutine]]></category>
		<category><![CDATA[Go语言进阶课]]></category>
		<category><![CDATA[Go高级工程师必修课]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[pitfall]]></category>
		<category><![CDATA[Pointer]]></category>
		<category><![CDATA[Slice]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[trap]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[TypeSystem]]></category>
		<category><![CDATA[value]]></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=4687</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/05/12/go-advanced-course 大家好，我是Tony Bai。 今天，怀着一丝激动和期待，我想向大家宣布一个酝酿已久的好消息：我的新专栏“TonyBai · Go 语言进阶课” 终于在极客时间正式上架了！ 这门课程的诞生，其实有一段不短的故事。它并非一时兴起，而是源于我对 Go 语言多年实践的沉淀、对 Gopher 们进阶痛点的洞察，以及一份希望能帮助更多开发者突破瓶颈、实现精通的心愿。 缘起：从 GopherChina 的线下训练营开始 故事的起点，要追溯到 GopherChina 2023 大会前夕。当时，我应邀开设了一期名为“Go 高级工程师必修课”的线下训练营。至今还清晰记得，在滴滴的一个会议室里，我与一群对 Go 语言充满热忱的开发者们，共同探讨、深入剖析了 Go 进阶之路上的种种挑战与关键技能。 那次线下课程的反馈非常积极，也让我深刻感受到，许多 Gopher 在掌握了 Go 的基础之后，普遍面临着“如何从熟练到精通”的困惑。他们渴望写出更优雅、更高性能的代码，希望提升复杂项目的设计能力，也期盼着能掌握更硬核的工程实践经验。 同年，我还临危受命，在 GopherChina 2023 上加了一场 “The State Of Go” 的演讲，与大家分享了我对 Go 语言发展趋势的观察与思考。这些经历，都让我更加坚信，系统性地梳理和分享 Go 语言的进阶知识，是非常有价值且必要的。 打磨：从线下到线上，不变的是匠心 将线下课程的精华沉淀下来，打磨成一门更普惠、更系统的线上专栏，这个想法在 2024 年就已萌生。但由于种种原因，特别是档期的冲突，这个计划暂时搁置了。 直到 2025 年，我与极客时间的老师们再次携手，投入了大量心血，对课程内容进行了反复打磨和精心编排。我们不仅希望传递知识，更希望启发思考，帮助大家建立起真正的“Go 语言设计思维和工程思维”。 正如我在专栏开篇词中提到的，如果你也正面临这些困惑： 感觉到了瓶颈？ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/go-advanced-course-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/05/12/go-advanced-course">本文永久链接</a> &#8211; https://tonybai.com/2025/05/12/go-advanced-course</p>
<p>大家好，我是Tony Bai。</p>
<p>今天，怀着一丝激动和期待，我想向大家宣布一个酝酿已久的好消息：我的新专栏<strong>“<a href="http://gk.link/a/12yGY">TonyBai · Go 语言进阶课</a>”</strong> 终于在极客时间正式上架了！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/go-advanced-course-1.jpg" alt="" /></p>
<p>这门课程的诞生，其实有一段不短的故事。它并非一时兴起，而是源于我对 Go 语言多年实践的沉淀、对 Gopher 们进阶痛点的洞察，以及一份希望能帮助更多开发者突破瓶颈、实现精通的心愿。</p>
<h2>缘起：从 GopherChina 的线下训练营开始</h2>
<p>故事的起点，要追溯到 GopherChina 2023 大会前夕。当时，我应邀开设了一期名为“Go 高级工程师必修课”的线下训练营。至今还清晰记得，在滴滴的一个会议室里，我与一群对 Go 语言充满热忱的开发者们，共同探讨、深入剖析了 Go 进阶之路上的种种挑战与关键技能。</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-advanced-training-2023-2.png" alt="GopherChina 2023 “Go高级工程师必修课”线下训练营图片" /></p>
<p>那次线下课程的反馈非常积极，也让我深刻感受到，许多 Gopher 在掌握了 Go 的基础之后，普遍面临着“如何从熟练到精通”的困惑。他们渴望写出更优雅、更高性能的代码，希望提升复杂项目的设计能力，也期盼着能掌握更硬核的工程实践经验。</p>
<p>同年，我还临危受命，在 GopherChina 2023 上加了一场 “The State Of Go” 的演讲，与大家分享了我对 Go 语言发展趋势的观察与思考。这些经历，都让我更加坚信，系统性地梳理和分享 Go 语言的进阶知识，是非常有价值且必要的。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-advanced-course-2.png" alt="" /></p>
<h2>打磨：从线下到线上，不变的是匠心</h2>
<p>将线下课程的精华沉淀下来，打磨成一门更普惠、更系统的线上专栏，这个想法在 2024 年就已萌生。但由于种种原因，特别是档期的冲突，这个计划暂时搁置了。</p>
<p>直到 2025 年，我与极客时间的老师们再次携手，投入了大量心血，对课程内容进行了反复打磨和精心编排。我们不仅希望传递知识，更希望启发思考，帮助大家建立起真正的“Go 语言设计思维和工程思维”。</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/go-advanced-course-3.jpg" alt="" /></p>
<p>正如我在专栏开篇词中提到的，如果你也正面临这些困惑：</p>
<ul>
<li><strong>感觉到了瓶颈？</strong> 写了不少 Go 代码，但总觉得离“精通”还差一口气？</li>
<li><strong>设计能力跟不上？</strong> 面对复杂的业务需求，如何进行合理的项目布局、包设计、接口设计？</li>
<li><strong>工程实践经验不足？</strong> 知道要测试、要监控、要优化，但具体到 Go 项目，如何落地？</li>
</ul>
<p>那么，这门“Go 语言进阶课”正是为你量身打造的。</p>
<h2>蜕变：从“熟练工”到“专家”，三大模块助你突破</h2>
<p>课程摒弃了简单罗列知识点的方式，聚焦于 Go 工程师能力提升的三个核心维度，精心设计了三大模块：</p>
<ul>
<li><strong>模块一：夯实基础，突破语法认知瓶颈</strong><br />
这里我们不满足于“知道”，而是追求“理解”。深入类型系统、值与指针、切片与 map 陷阱、接口与组合、泛型等核心概念的底层逻辑与设计哲学，让你写出更地道、更健壮的 Go 代码。</li>
<li><strong>模块二：设计先行，奠定高质量代码基础</strong><br />
从宏观的项目布局、包设计，到具体的并发模型选择、接口设计原则，再到实用的错误处理策略和 API 设计规范。提升你的软件设计能力，让你能驾驭更复杂的项目。</li>
<li><strong>模块三：工程实践，锻造生产级 Go 服务</strong><br />
聚焦于将 Go 代码变成可靠线上服务的关键环节。从应用骨架、核心组件、可观测性，到故障排查、性能调优、云原生部署以及与 AI 大模型集成，全是硬核干货。</li>
</ul>
<p>此外，课程还安排了<strong>实战串讲项目</strong>，带你将学到的知识融会贯通，亲手构建并完善一个真实的 Go 服务。</p>
<p>我深知，从“熟练”到“精通”，不是一蹴而就的。但这门课程，希望能成为你进阶路上的助推器和导航仪。它凝聚了我 20 多年的行业经验，特别是我在电信领域高并发网关和智能网联汽车车云平台使用 Go 语言构建大规模生产系统的实践与思考。</p>
<p>在课程中，你不仅能学到 Go 的高级特性和用法，更能体会到 Go 语言“组合优于继承”、“显式错误处理”等设计哲学的精髓，以及在大模型时代如何让 AI 赋能你的 Go 应用。</p>
<h2>现在，是时候了！</h2>
<p>正如我在开篇词中强调的，Go 语言正迎来它的黄金十年。从 TIOBE 榜单的稳步攀升（2025 年 4 月份额已突破 3%），到全球 GopherCon 的回归，再到各大主流厂商对 Go 的拥抱（比如 TypeScript 编译器向 Go 移植、Grafana 和 GitHub 用 Go 重写 MCP Server），都预示着 Go 在云原生、微服务、AI 后端等领域的强劲势头。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-advanced-course-3.png" alt="" /><br />
<img src="https://tonybai.com/wp-content/uploads/2025/go-advanced-course-4.png" alt="" /></p>
<p>现在，正是学习和进阶 Go 的最佳时机！</p>
<p>如果你渴望突破瓶颈，实现从“Go 熟练工”到“Go 专家”的蜕变，那么，我在极客时间的《TonyBai · Go 语言进阶课》等你！</p>
<p><strong>扫描下方二维码或点击[阅读原文]，立即加入，开启你的 Go 语言精进之旅！</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/go-advanced-course-4.png" alt="" /></p>
<p>期待与你在课程中相遇，共同探索 Go 语言的精妙与强大！</p>
<p>最后，一个小小的请求：</p>
<p>如果你身边有正在 Go 语言进阶道路上摸索，或者渴望提升 Go 工程实践与设计能力的 Gopher 朋友、同事，<strong>请将这篇文章或课程信息分享给他们</strong>。 每一份善意的传递，都可能为他人的技术成长点亮一盏灯。</p>
<p>也欢迎大家在评论区踊跃交流，分享你对 Go 进阶的困惑、经验或对课程的期待。让我们一起，在 Go 的世界里，持续学习，共同进步！</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/05/12/go-advanced-course/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go开发者必看！JetBrains 2024报告深度解读：Go语言现状、趋势与未来机遇</title>
		<link>https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis/</link>
		<comments>https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis/#comments</comments>
		<pubDate>Thu, 10 Apr 2025 00:08:33 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[cmdline]]></category>
		<category><![CDATA[GenAI]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[openai]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SlashData]]></category>
		<category><![CDATA[Stackoverflow]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[云服务]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[大模型]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=4550</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis 嘿，各位Gopher！ 你是否也在关心Go语言的最新动态？它还在快速增长吗？薪资水平如何？未来方向在哪？ 这是我看到的关于2024年Go语言发展趋势最全面、数据最翔实的一份报告解读。 JetBrains，这家开发者们都非常熟悉的工具公司，最近发布了《Is Golang Still Growing? Go Language Popularity Trends in 2024》的研究报告文章。如果你是Go开发者，或者正在关注Go生态，这篇文章就是为你准备的，强烈推荐阅读！ 在深入细节之前，先为你快速提炼报告的核心发现，让你高效把握重点： Go开发者规模依旧庞大且专业： 全球专业Go开发者估算超400万，且持续增长。 云原生主战场地位稳固： Web服务、云服务、IT基础设施是Go应用核心领域。 “钱景”诱人： Go开发者薪资普遍处于行业较高水平。 各大榜单表现亮眼： 在TIOBE、GitHub Octoverse等多个权威榜单中，Go排名稳定或显著上升。 与Rust互补而非替代： 两者定位不同，常被结合使用。 未来聚焦： 持续深耕云原生，并在GenAI基础设施领域崭露头角。 Go开发者画像：规模、角色与“钱景” 报告显示，全球使用Go的专业开发者规模可观。JetBrains估计近一年有410万专业人士使用Go，其中180万将其作为主要语言之一。SlashData的估算则更高，达到470万（包含学生和爱好者），而最新的Stack Overflow和SlashData数据推算更是达到了580万。 从上图中展示的开发者从事的软件类型来看： Web服务 (无GUI): 744,000 网站: 732,000 云服务: 681,000 开发者角色方面(如上图)，除了大量的软件工程师/程序员 (约160万)外，DevOps/基础设施工程师(约50万)的比例也相当高，这凸显了Go在云原生基础设施和运维领域的巨大需求。 更让Gopher们关心的是薪资。报告明确指出，Go开发者是业内薪资最高的人群之一。美国Go开发者的平均年薪约为$76,000，经验丰富者甚至可达$500,000。 Go的应用版图：核心场景与行业分布 Go最常见的两大用例依然是： API/RPC服务(75%) 命令行工具(62%) 哪些行业在重度使用Go呢？ 科技 (超过40%): Google, DataDog, K8s, HashiCorp, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/jetbrains-2024-go-report-analysis-1.jpg" alt="" /></p>
<p><a href="https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis">本文永久链接</a> &#8211; https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis</p>
<p>嘿，各位Gopher！</p>
<p>你是否也在关心Go语言的最新动态？它还在快速增长吗？薪资水平如何？未来方向在哪？</p>
<p><strong>这是我看到的关于2024年Go语言发展趋势最全面、数据最翔实的一份报告解读。</strong> JetBrains，这家开发者们都非常熟悉的工具公司，最近发布了《<a href="https://blog.jetbrains.com/research/2025/04/is-golang-still-growing-go-language-popularity-trends-in-2024/">Is Golang Still Growing? Go Language Popularity Trends in 2024</a>》的研究报告文章。如果你是Go开发者，或者正在关注Go生态，<strong>这篇文章就是为你准备的，强烈推荐阅读！</strong></p>
<p>在深入细节之前，先为你<strong>快速提炼报告的核心发现</strong>，让你高效把握重点：</p>
<ul>
<li><strong>Go开发者规模依旧庞大且专业：</strong> 全球专业Go开发者估算超<strong>400万</strong>，且持续增长。</li>
<li><strong>云原生主战场地位稳固：</strong> Web服务、云服务、IT基础设施是Go应用核心领域。</li>
<li><strong>“钱景”诱人：</strong> Go开发者薪资普遍处于<strong>行业较高水平</strong>。</li>
<li><strong>各大榜单表现亮眼：</strong> 在TIOBE、GitHub Octoverse等多个权威榜单中，Go排名<strong>稳定或显著上升</strong>。</li>
<li><strong>与Rust互补而非替代：</strong> 两者定位不同，常被结合使用。</li>
<li><strong>未来聚焦：</strong> 持续深耕<strong>云原生</strong>，并在<strong>GenAI基础设施</strong>领域崭露头角。</li>
</ul>
<hr />
<h2>Go开发者画像：规模、角色与“钱景”</h2>
<p>报告显示，全球使用Go的专业开发者规模可观。JetBrains估计近一年有<strong>410万</strong>专业人士使用Go，其中<strong>180万</strong>将其作为主要语言之一。<a href="https://dashboard-tool-report.cdn.prismic.io/dashboard-tool-report/ZmMmh5m069VX1jxc_-W.Kodluyoruz-Programminglanguagecommunities.pdf">SlashData的估算则更高</a>，达到<strong>470万</strong>（包含学生和爱好者），而最新的Stack Overflow和SlashData数据推算更是达到了<strong>580万</strong>。</p>
<p><img src="https://tonybai.com/wp-content/uploads/jetbrains-2024-go-report-analysis-2.jpg" alt="" /></p>
<p>从上图中展示的开发者从事的软件类型来看：</p>
<ul>
<li>Web服务 (无GUI): <strong>744,000</strong></li>
<li>网站: <strong>732,000</strong></li>
<li>云服务: <strong>681,000</strong></li>
</ul>
<p><img src="https://tonybai.com/wp-content/uploads/jetbrains-2024-go-report-analysis-3.jpg" alt="" /></p>
<p>开发者角色方面(如上图)，除了大量的<strong>软件工程师/程序员 (约160万)</strong>外，<strong>DevOps/基础设施工程师(约50万)</strong>的比例也相当高，这凸显了Go在云原生基础设施和运维领域的巨大需求。</p>
<p>更让Gopher们关心的是薪资。报告明确指出，Go开发者是<strong>业内薪资最高的人群之一</strong>。美国Go开发者的平均年薪约为<strong>$76,000</strong>，经验丰富者甚至可达<strong>$500,000</strong>。</p>
<hr />
<h2>Go的应用版图：核心场景与行业分布</h2>
<p>Go最常见的两大用例依然是：</p>
<ol>
<li><strong>API/RPC服务(75%)</strong></li>
<li><strong>命令行工具(62%)</strong></li>
</ol>
<p>哪些行业在重度使用Go呢？</p>
<ul>
<li><strong>科技 (超过40%):</strong> Google, DataDog, K8s, HashiCorp, Dropbox, Salesforce, Apple&#8230;</li>
<li><strong>金融服务 (13%):</strong> Monzo, American Express, Mercado Libre&#8230;</li>
<li><strong>交通与零售 (10%):</strong> Amazon, Uber, DeliveryHero, HelloFresh&#8230;</li>
<li><strong>媒体/游戏 (7%):</strong> Netflix, Bytedance, Tencent, Reddit, Snap&#8230;</li>
</ul>
<hr />
<h2>多维数据透视：Go在各大榜单上的表现</h2>
<p>担心Go的热度？来看看它在各大权威榜单上的表现吧：</p>
<ul>
<li><strong>JetBrains语言潜力指数:</strong> Go排名 <strong>第4</strong>，仅次于TypeScript, Rust, Python，显示出强大的增长潜力和用户粘性。</li>
<li><strong>Stack Overflow开发者调查:</strong> 在“受喜爱和期望” (Admired and Desired) 榜单中，Go从去年的第9位<strong>跃升至第7位</strong>，超过了C#和Shell。</li>
<li><strong>GitHub Octoverse:</strong> 稳定保持在 <strong>Top 10</strong> 编程语言之列，并且是 <strong>Top 3增长最快的语言之一</strong> (开源项目活跃度)。</li>
<li><strong>Cloudflare Radar (API客户端语言):</strong> Go在2024年 <strong>超越Node.js</strong>，成为自动化API请求最常用的语言，占比约<strong>12%</strong> (去年为8.4%)。</li>
<li><strong>TIOBE指数:</strong> Go从2023年的第13位<strong>大幅攀升至第7位</strong>，达到自2009年以来的最高排名！**</li>
</ul>
<p><img src="https://tonybai.com/wp-content/uploads/jetbrains-2024-go-report-analysis-4.png" alt="" /><br />
<center>TIOBE 2025.04榜单</center></p>
<p><strong>这些数据有力地证明，Go语言不仅没有衰退，反而在多个维度上保持着强劲的势头。</strong></p>
<hr />
<h2>Go vs Rust：是对手还是队友？</h2>
<p>报告特别提到了Go与同样热门的Rust的关系。结论是：<strong>它们更多是互补，而非直接竞争</strong>。</p>
<ul>
<li><strong>Go:</strong> 更易上手，开发效率高，非常适合云服务、微服务、API、CLI开发，强调 <strong>快速开发和可伸缩性</strong>。</li>
<li><strong>Rust:</strong> 性能极致，适用于性能密集型、底层嵌入式开发，但<strong>复杂性更高，开发成本和时间也更高</strong>。</li>
</ul>
<p>许多公司会同时使用这两种语言，根据场景需求选择最合适的工具。对Rust感兴趣的Go开发者增多，并不意味着Go市场份额的下降。</p>
<hr />
<h2>Go的未来之路：聚焦云原生与拥抱GenAI</h2>
<p>展望未来，Go团队将继续<strong>聚焦云原生领域</strong>，满足其对<strong>开发效率 (time to value)、可靠性和可伸缩性</strong>的核心需求。</p>
<p>一个令人兴奋的新方向是<strong>生成式AI (GenAI) 基础设施</strong>。虽然Go在传统机器学习领域不如Python，但其在性能和可伸缩性上的优势，使其成为构建<strong>AI模型服务 (model serving)</strong>等生产级AI基础设施的理想选择。</p>
<ul>
<li>主流AI平台 (OpenAI, Google AI等) 已提供<strong>Go SDK</strong>。</li>
<li>Go的GenAI生态正在成长，涌现出如<a href="https://github.com/ollama/ollama/">Ollama</a>, <a href="https://github.com/tmc/langchaingo">LangChain Go</a>, <a href="https://github.com/kserve/kserve">kserve</a>等工具。</li>
<li><strong>GenAI基础设施本身，就像云基础设施一样，正在越来越多地用Go编写。</strong></li>
</ul>
<p>报告还提到，<a href="https://tonybai.com/2024/10/10/pass-torch-to-go-new-leadership-team/">Go项目领导层虽有变动</a>（Russ Cox卸任，Austin Clements和Cherry Mui接任），但新领导层对Go的理念和目标有深刻理解，确保了项目的连续性和稳定性。<strong><a href="https://tonybai.com/2025/02/16/some-changes-in-go-1-24/">Go 1.24</a>已于2025年2月发布，未来可期。</strong></p>
<hr />
<h2>总结：黄金时代，未来可期</h2>
<p>总而言之，JetBrains这份详尽的报告描绘了一个清晰的画面：</p>
<p><strong>2024年，Go语言不仅保持了稳定发展，更在云原生领域巩固了核心地位，并在GenAI基础设施等新兴领域展现出强劲潜力。它正步入一个成熟且充满机遇的“黄金时代”</strong>。</p>
<p>对于Gopher们来说，持续深耕云原生，关注Go在AI基础设施的应用，无疑是明智的选择。</p>
<p>那么，<strong>你认为Go语言的下一个增长点会在哪里？你对Go的未来有什么看法？</strong></p>
<p><strong>欢迎在评论区留下你的真知灼见，一起交流探讨！</strong></p>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2025年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。并且，2025年将在星球首发“Gopher的AI原生应用开发第一课”、“Go陷阱与缺陷”和“Go原理课”专栏！此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格6$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
<li>Gopher Daily Feed订阅 &#8211; https://gopherdaily.tonybai.com/feed</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2024年Go语言盘点：排名历史新高，团队新老传承</title>
		<link>https://tonybai.com/2025/01/06/the-2024-review-of-go-programming-language/</link>
		<comments>https://tonybai.com/2025/01/06/the-2024-review-of-go-programming-language/#comments</comments>
		<pubDate>Sun, 05 Jan 2025 21:48:41 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AustinClements]]></category>
		<category><![CDATA[Cgo]]></category>
		<category><![CDATA[Changelog]]></category>
		<category><![CDATA[CherryMui]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[devirtualize]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[for-range]]></category>
		<category><![CDATA[Gartner]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go.mod]]></category>
		<category><![CDATA[go.work]]></category>
		<category><![CDATA[go1.23]]></category>
		<category><![CDATA[go1.24]]></category>
		<category><![CDATA[gobuild]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gomodule]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[gopherchina]]></category>
		<category><![CDATA[GopherCon]]></category>
		<category><![CDATA[GopherConAfrica]]></category>
		<category><![CDATA[gotest]]></category>
		<category><![CDATA[GoTime]]></category>
		<category><![CDATA[hype-cycle]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Inline]]></category>
		<category><![CDATA[loopvar]]></category>
		<category><![CDATA[octoverse]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[openai]]></category>
		<category><![CDATA[oscar]]></category>
		<category><![CDATA[PGO]]></category>
		<category><![CDATA[reddit]]></category>
		<category><![CDATA[RussCox]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[structs]]></category>
		<category><![CDATA[Telemetry]]></category>
		<category><![CDATA[ticker]]></category>
		<category><![CDATA[Timer]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[typealias]]></category>
		<category><![CDATA[typeparameter]]></category>
		<category><![CDATA[unique]]></category>
		<category><![CDATA[vendor]]></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=4456</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2024/01/06/the-2024-review-of-go-programming-language 2024年底，由于感染了甲流，我在家卧床休息了两天，原定于2024年进行的Go语言盘点写作因此被迫推迟。不过，我始终相信：迟到但不会缺席。在2025年元旦的第一天，我终于开始了这篇博客的撰写。 时间过得真快，《2023年Go语言盘点：稳中求新，稳中求变》依然历历在目。转眼之间，一年365天过去了，发生了许多事情，甚至有些记忆已在脑海中模糊或消逝。在这里，我将带你盘点那些关于Go的重要时刻，唤起你对Go的美好回忆。 回顾整个2024年，如果非要用一句话来形容Go语言的状态，我会选择：Go完成了技术成熟度曲线中的“稳步爬升复苏期”，开始进入“生产成熟期”。这一点在Go的排名中得到了直接体现，并在Go社区的活跃度方面得到了间接的印证。而Go的年中换帅似乎也预示着这是一个新的起点！在过去一年中，得益于Go团队和社区的共同努力，Go发布了许多值得关注的新特性。 接下来，我将为大家逐一详细介绍！ 1. Go排名创历史新高 说到编程语言排名，程序员们首先想到的就是TIOBE！在2024年的TIOBE排行榜上，尽管Go语言没有像AI时代的霸主语言Python那样耀眼，但跻身前十并站稳第七名这一成绩也足以让其他语言羡慕不已！ 图：2024年12月TIOBE排名TOP 10 而从2009年开源至今，Go在TIOBE排名走势如下： 图：2010年-2024年TIOBE排行榜Go语言走势 了解Go历史的朋友都知道，Go语言真正具备生产级成熟度是从2015年的Go 1.5版本开始的。按照技术成熟度曲线的划分，2015年之前及其后的一段时间可以视为技术萌芽期。从曲线中可以看出，2017年时达到了期望膨胀期的峰值。此后，Go经历了一段“漫长”的泡沫破裂低谷期以及稳步爬升的复苏期。从2023年开始，到2024年末，Go语言复苏的速度日益加快！目前来看，如无意外，Go将进入技术成熟度曲线的下一阶段：生产成熟期！我曾提到过：绝大多数主流编程语言将在其诞生后的第15至第20年间大步前进。按照这个编程语言的一般规律，刚刚迈过开源第15个年头的Go刚刚迈进自己的黄金5-10年。 当然，单看TIOBE单一榜单似乎说服力不足，我们再来看看今年的Github octoverse报告。在这份报告中，Go依旧稳居github热门编程语言前10(如下图)，这一位置已经保持了三年多了！ 图：2024年Github最热门编程语言排行榜 此外，在2024年年中发布的“IEEE Spectrum 2024编程语言排行榜”中，Go在Spectrum排名和Trending排名中分列第8位和第7位。 除了排行榜之外，通过Reddit中编程语言论坛的活跃度也可以看出Go语言在全球的受欢迎程度和用户广度。以下是2025年1月1日Reddit上最活跃的9门编程语言子论坛的实时状态截图： 图：2025.1.1 Reddit编程语言子论坛状态对比 我们看到Go子论坛在成员数量和某一时刻的在线人数上都表现良好。此外，如果你是长期关注Reddit Go论坛的Gopher，一定注意到自2024年初以来，Go论坛的人气迅速增长，日均帖子数相比前两年显著增加，其中很多都是新加入Go阵营的初学者！ 注：Rust的人气是真高啊，online人数断崖领先！ 编程语言技术大会是衡量语言流行度和受欢迎程度的另一重要风向标。自从全球从新冠疫情中恢复后，GopherCon逐渐在各地线下恢复，到了2024年基本回到了疫情前的状态，甚至在一些地方的GopherCon还超越了以往的受欢迎程度。例如，2024年GopherCon欧洲大会破例举办了两次。此外，首届在非洲举行的GopherCon Africa也于2024年10月份在肯尼亚首都内罗毕成功举行！唯一的遗憾是GopherChina在2024年缺席，这或许与国内的经济形势有关。 Go的增长趋势来的有些快，不知道是否是得益于AI应用的快速发展！但就像Go团队前成员Jaana Dogan(Rakyll)所说的那样： Go将成为AI时代重要的AI应用开发语言！AI大模型三强：OpenAI、Claude和Google都提供了对Go SDK的官方支持： OpenAI Go SDK &#8211; https://github.com/openai/openai-go Claude GO SDK &#8211; https://github.com/anthropics/anthropic-sdk-go Google AI Go SDK &#8211; https://github.com/google/generative-ai-go 此外，提到Go和AI大模型，我们不得不提及一个重量级的开源项目——Ollama，它可以说是当前私有部署和使用开源大模型的事实标准！在2024年的用户调查报告中，Go团队还特别关注了用户对使用Go开发AI应用的需求，并将AI应用开发视为Go应用的下一个重要赛道。此外，Russ Cox也积极参与这一领域，开源了专用于开源项目运营维护的AI机器人：Oscar，同时探索Go在AI领域的应用。 如果说Go的排名再创新高让Gopher和Go社区对Go充满了更多自信，那么Go团队的换帅则向整个编程语言界展示了团队的传承与发展！ 2. Go团队换帅展示团队传承 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/the-2024-review-of-go-programming-language-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2024/01/06/the-2024-review-of-go-programming-language">本文永久链接</a> &#8211; https://tonybai.com/2024/01/06/the-2024-review-of-go-programming-language</p>
<p>2024年底，由于感染了甲流，我在家卧床休息了两天，原定于2024年进行的Go语言盘点写作因此被迫推迟。不过，我始终相信：迟到但不会缺席。在2025年元旦的第一天，我终于开始了这篇博客的撰写。</p>
<p>时间过得真快，《<a href="https://tonybai.com/2023/12/31/the-2023-review-of-go-progrmming-language/">2023年Go语言盘点：稳中求新，稳中求变</a>》依然历历在目。转眼之间，一年365天过去了，发生了许多事情，甚至有些记忆已在脑海中模糊或消逝。在这里，我将带你盘点那些关于Go的重要时刻，唤起你对Go的美好回忆。</p>
<p>回顾整个2024年，如果非要用一句话来形容Go语言的状态，我会选择：<strong>Go完成了<a href="https://www.gartner.com/cn/research/methodologies/gartner-hype-cycle">技术成熟度曲线</a>中的“稳步爬升复苏期”，开始进入“生产成熟期”</strong>。这一点在Go的排名中得到了直接体现，并在Go社区的活跃度方面得到了间接的印证。而<a href="https://tonybai.com/2024/10/10/pass-torch-to-go-new-leadership-team">Go的年中换帅</a>似乎也<strong>预示着这是一个新的起点</strong>！在过去一年中，得益于Go团队和社区的共同努力，Go发布了许多值得关注的新特性。</p>
<p>接下来，我将为大家逐一详细介绍！</p>
<h2>1. Go排名创历史新高</h2>
<p>说到编程语言排名，程序员们首先想到的就是TIOBE！在2024年的<a href="https://www.tiobe.com/tiobe-index/">TIOBE排行榜</a>上，尽管Go语言没有像<a href="https://tonybai.com/2024/10/14/programming-in-ai-era">AI时代</a>的霸主语言Python那样耀眼，但跻身前十并站稳第七名这一成绩也足以让其他语言羡慕不已！</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2024-review-of-go-programming-language-4.png" alt="" /><br />
<center>图：2024年12月TIOBE排名TOP 10</center></p>
<p>而从2009年开源至今，Go在TIOBE排名走势如下：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2024-review-of-go-programming-language-2.png" alt="" /><br />
<center>图：2010年-2024年TIOBE排行榜Go语言走势</center></p>
<p>了解Go历史的朋友都知道，Go语言真正具备生产级成熟度是从2015年的Go 1.5版本开始的。按照技术成熟度曲线的划分，2015年之前及其后的一段时间可以视为技术萌芽期。从曲线中可以看出，2017年时达到了期望膨胀期的峰值。此后，Go经历了一段“漫长”的泡沫破裂低谷期以及稳步爬升的复苏期。从2023年开始，到2024年末，Go语言复苏的速度日益加快！目前来看，如无意外，Go将进入技术成熟度曲线的下一阶段：生产成熟期！我曾提到过：<strong>绝大多数主流编程语言将在其诞生后的第15至第20年间大步前进</strong>。按照这个编程语言的一般规律，刚刚<a href="https://tonybai.com/2024/11/12/go-turns-15">迈过开源第15个年头的Go</a>刚刚迈进自己的黄金5-10年。</p>
<p>当然，单看TIOBE单一榜单似乎说服力不足，我们再来看看<a href="https://github.blog/news-insights/octoverse/octoverse-2024/#the-most-popular-programming-languages">今年的Github octoverse报告</a>。在这份报告中，Go依旧稳居github热门编程语言前10(如下图)，这一位置已经保持了三年多了！</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2024-review-of-go-programming-language-3.png" alt="" /><br />
<center>图：2024年Github最热门编程语言排行榜</center></p>
<p>此外，在2024年年中发布的“<a href="https://mp.weixin.qq.com/s/nLgg18iG3ZIt-ojHqPuqRA">IEEE Spectrum 2024编程语言排行榜</a>”中，Go在Spectrum排名和Trending排名中分列第8位和第7位。</p>
<p>除了排行榜之外，通过Reddit中编程语言论坛的活跃度也可以看出Go语言在全球的受欢迎程度和用户广度。以下是2025年1月1日Reddit上最活跃的9门编程语言子论坛的实时状态截图：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2024-review-of-go-programming-language-5.png" alt="" /><br />
<center>图：2025.1.1 Reddit编程语言子论坛状态对比</center></p>
<p>我们看到Go子论坛在成员数量和某一时刻的在线人数上都表现良好。此外，如果你是长期关注Reddit Go论坛的Gopher，一定注意到自2024年初以来，Go论坛的人气迅速增长，日均帖子数相比前两年显著增加，其中很多都是新加入Go阵营的初学者！</p>
<blockquote>
<p>注：<a href="https://tonybai.com/tag/rust">Rust</a>的人气是真高啊，online人数断崖领先！</p>
</blockquote>
<p>编程语言技术大会是衡量语言流行度和受欢迎程度的另一重要风向标。自从全球从新冠疫情中恢复后，GopherCon逐渐在各地线下恢复，到了2024年基本回到了疫情前的状态，甚至在一些地方的GopherCon还超越了以往的受欢迎程度。例如，2024年GopherCon欧洲大会破例举办了两次。此外，<a href="https://dev.to/johneliud/my-experience-attending-gophercon-africa-2024-171e">首届在非洲举行的GopherCon Africa</a>也于2024年10月份在肯尼亚首都内罗毕成功举行！唯一的遗憾是<strong>GopherChina在2024年缺席</strong>，这或许与国内的经济形势有关。</p>
<p>Go的增长趋势来的有些快，不知道是否是得益于AI应用的快速发展！但就像Go团队前成员<a href="https://github.com/rakyll">Jaana Dogan(Rakyll)</a>所说的那样：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2024-review-of-go-programming-language-6.png" alt="" /></p>
<p>Go将成为AI时代重要的AI应用开发语言！AI大模型三强：OpenAI、Claude和Google都提供了对Go SDK的官方支持：</p>
<ul>
<li>OpenAI Go SDK &#8211; https://github.com/openai/openai-go</li>
<li>Claude GO SDK &#8211; https://github.com/anthropics/anthropic-sdk-go</li>
<li>Google AI Go SDK &#8211; https://github.com/google/generative-ai-go</li>
</ul>
<p>此外，提到Go和AI大模型，我们不得不提及一个重量级的开源项目——<a href="https://ollama.com/">Ollama</a>，它可以说是当前私有部署和使用开源大模型的事实标准！在<a href="https://go.dev/blog/survey2024-h1-results">2024年的用户调查报告</a>中，Go团队还特别关注了用户对使用Go开发AI应用的需求，并将AI应用开发视为Go应用的下一个重要赛道。此外，Russ Cox也积极参与这一领域，开源了专<a href="https://mp.weixin.qq.com/s/dbuR1oRavvaemUPA7uhyag">用于开源项目运营维护的AI机器人：Oscar</a>，同时探索Go在AI领域的应用。</p>
<p>如果说Go的排名再创新高让Gopher和Go社区对Go充满了更多自信，那么Go团队的换帅则向整个编程语言界展示了团队的传承与发展！</p>
<h2>2. <a href="https://mp.weixin.qq.com/s/2Sy6K_dU1j3tZZiyyfCTDQ">Go团队换帅展示团队传承</a></h2>
<p>对于Go团队来说，2024年的最大的事件不是<a href="https://tonybai.com/2024/02/18/some-changes-in-go-1-22">Go 1.22</a>或<a href="https://tonybai.com/2024/08/19/some-changes-in-go-1-23/">Go 1.23</a>的发布，而是<strong>团队换帅</strong>。</p>
<p>2024年中旬，Go团队的技术负责人Russ Cox宣布，他将于2024年9月1日起卸任Go项目的技术领导职务。自2008年参与Go项目以来，Russ于2012年成为其技术负责人。在过去的12年里，他引领Go语言从一个实验性项目成长为当今最受欢迎的编程语言之一。在他的带领下，Go凭借简洁的语法、高效的并发模型和强大的标准库赢得了众多开发者的青睐，并在云计算、微服务和DevOps等领域得到了广泛应用。</p>
<p>Russ分享了他卸任的想法，表示这一决定是经过深思熟虑的，是自然发展的结果。他认为，尽管长期稳定的领导对大型项目至关重要，但领导层的变动也能为项目注入新的活力和视角。他强调，定期更换领导者是非常重要的，这有助于引入新思想并防止项目陷入停滞。</p>
<p>接替Russ Cox的是Austin Clements，他将成为新的Go技术负责人，同时领导Google的Go团队和整个Go项目。Austin自2014年起就在Google从事与Go相关的工作，拥有丰富的经验和深厚的技术背景。同时，Cherry Mui将接手负责编译器和运行时等“Go核心”领域的工作。Cherry自2016年加入Google，在Go的核心开发领域表现出色。Russ Cox对这两位新领导给予了高度评价，称赞他们具备卓越的判断力以及对Go语言和其运行系统的广泛而深入的理解。</p>
<p>通过9月份到12月份的角色过期期的观察来看，两位“新负责人”的表现是中规中矩，沿袭了Russ Cox之前确定的Go项目管理框架，Cherry Mui在Go core领域表现的十分积极，这从”<a href="https://github.com/golang/go/issues/43930">Go compiler and runtime meeting notes</a>“的记录中可见一斑！</p>
<p>在<a href="https://changelog.com/gotime/333">第333期GoTime播客</a>中，两位新leader也初步分享了他们对后续Go演进的一些想法。</p>
<p>Austin强调，虽然Go保持着稳定和简洁，但它必须继续演进。他的首要目标之一是改善Go的可扩展性，无论是在开发过程中还是在背后的工程流程中。他希望通过提高透明度和扩大社区参与度，赋能社区，创建一个能够更好整合用户反馈的平台（可能是一个论坛），使贡献者能够开发与核心团队目标一致的工具和解决方案。在性能改进方面，Austin长期致力于优化Go的垃圾回收系统，目前正在试验一种新算法，幽默地称其为“绿茶”，旨在优化资源使用，进一步提升Go在越来越大系统上的扩展能力。</p>
<p>Cherry则指出，Go的用户基础正在快速增长，而核心团队的资源却有限。她的任务是确保Go平台能够支持这一日益增长的社区，无论是通过构建更好的API还是平台，帮助用户在Go的基础上开发更强大的工具和解决方案。在技术扩展性方面，Cherry也表达了自己的关注。随着计算能力的提升，核心数量和内存容量不断增加，Go需要适应，以高效处理更大的工作负载。Cherry表示，她非常期待与社区中的工程师合作，解决这些挑战，保持Go简单且可扩展的声誉。</p>
<p>从两位领导的想法与目标中，我们可以看到Go团队传承的文化。对于这样的“换帅”，Go社区应充满信心。</p>
<blockquote>
<p>注：<a href="https://changelog.com/gotime">GoTime博客</a>在完成其<a href="https://changelog.com/gotime">第340期内容</a>后，因平台方Changelog的变动宣布停播了！</p>
</blockquote>
<h2>3. Go Release新特性一览</h2>
<p>对于已经过了15个生日的Go来说，其演进的节奏已经非常稳定和成熟了。2024年，Go平稳地发布了两个重要版本：Go 1.22和Go 1.23。下面我们就来简单浏览一下这两个版本的主要新特性。</p>
<h3>3.1 Go 1.22主要新特性</h3>
<h4>语言特性</h4>
<ul>
<li>loopvar语义修正：for循环中通过短声明定义的循环变量，由整个循环共享一个实例变为每次迭代定义一个实例。这是 Go 语言发展历史上第一次真正的填语义层面的“坑”。</li>
<li>for range支持整型表达式：for range循环可以遍历整型范围，如for i := range 10。</li>
</ul>
<h4>编译器和运行时</h4>
<ul>
<li>PGO优化增强：基于PGO的构建可以实现更高比例的调用去虚拟化(devirtualize)，带来性能提升。</li>
<li>编译器优化：编译器可以更多地运用devirtualize和inline技术进行优化。</li>
<li>运行时优化：运行时可以使基于类型的垃圾收集的元数据更接近每个堆对象，从而降低CPU和内存开销。</li>
</ul>
<h4>工具链</h4>
<ul>
<li>go work支持vendor：go work命令可以管理vendor目录，并且支持使用go build -mod=vendor构建。</li>
<li>go mod init改进：不再尝试导入其他vendor工具(比如Gopkg)的配置文件。</li>
<li>go test -cover改进： 对于没有测试文件的包，会报告覆盖率为0.0%。</li>
</ul>
<h4>标准库</h4>
<ul>
<li>math/rand/v2: 标准库第一个V2版本包。</li>
<li>增强http.ServeMux的表达能力: 新版ServeMux支持静态路由、通配符、主机匹配和变量捕获。</li>
</ul>
<h3>3.2 Go 1.23 主要新特性</h3>
<h4>语言特性</h4>
<ul>
<li>自定义函数迭代器：for range语句支持遍历用户自定义的集合类型，需要定义满足特定签名的迭代器函数。</li>
<li>别名中增加泛型参数：支持在类型别名定义中使用类型参数，如：</li>
</ul>
<pre><code>type MySlice[T any] = []T
</code></pre>
<h4>编译器与运行时</h4>
<ul>
<li>PGO构建速度提升: 该版本优化后，PGO带来的编译开销显著降低。</li>
<li>限制对linkname的使用: Go 1.23禁止使用linkname指令引用标准库中未标记的内部符号。</li>
</ul>
<h4>工具链</h4>
<ul>
<li>Telemetry (遥测): go工具链程序收集性能和使用数据的系统，且支持go telemetry on|off|local命令。</li>
<li>go env -changed: go env子命令增加-changed选项，可以查看当前Go环境中设置的Go环境变量值与默认值有差异的项的值。</li>
<li>go mod tidy -diff: go mod tidy增加-diff选项，只打印更新信息但不做实际更新。</li>
<li>go.mod中增加godebug指示符: 可以通过该指示符设置特定的GODEBUG选项。</li>
</ul>
<h4>标准库</h4>
<ul>
<li>Timer/Ticker变化: Timer和Ticker的GC不再需要Stop方法，Stop/Reset后不再接收旧值。</li>
<li>structs包: 添加一个零size的类型HostLayout，用于控制编译器对结构体类型的布局方式。</li>
<li>unique包: 新增了unique包，用于处理唯一值的集合。</li>
<li>iter包:  新增了iter包，并增加了函数迭代器相关的实用函数到maps、slices等包中。</li>
</ul>
<p>更多更详细关于Go新特性的内容，请阅读《<a href="https://tonybai.com/2024/02/18/some-changes-in-go-1-22/">Go 1.22中值得关注的几个变化</a>》和《<a href="https://tonybai.com/2024/08/19/some-changes-in-go-1-23/">Go 1.23中值得关注的几个变化</a>》。</p>
<h2>4. 2025展望</h2>
<p>按照Go演进的一贯风格，我本不该对Go抱有过多期待^_^，但还是忍不住想说几句。</p>
<p><a href="https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/">Go已经稳稳地占据了云计算领域的头部后端编程语言地位</a>，在多个编程语言排行榜上名列前茅，Go社区也在健康快速地发展。然而，机遇与风险总是并存。</p>
<p>虽然Go在云原生、Web服务、微服务、API和CLI开发方面拥有明显优势，但也面临着来自Rust等语言的挑战。Go需要进一步巩固其在这些优势领域的地位，同时探索一些能够发挥自身优势的新方向，例如AI应用开发等。</p>
<p>同时，我们期待新一代Go团队领导者，尤其是来自Go编译器和运行时组的领导者们，能够<strong>深入打磨和优化Go语言的编译器、运行时性能以及语言互操作性</strong>。毕竟，谁不喜欢那种因性能自然增长而带来的愉悦感，以及借助其他语言优势生态快速完成功能的灵活性呢!</p>
<p>最后，感谢Go团队和Go社区在Go语言演进发展上做出的贡献，希望Go越走越好！</p>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
<li>Gopher Daily Feed订阅 &#8211; https://gopherdaily.tonybai.com/feed</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/01/06/the-2024-review-of-go-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go，15岁了[译]</title>
		<link>https://tonybai.com/2024/11/12/go-turns-15/</link>
		<comments>https://tonybai.com/2024/11/12/go-turns-15/#comments</comments>
		<pubDate>Tue, 12 Nov 2024 10:49:48 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[AustinClements]]></category>
		<category><![CDATA[bisect]]></category>
		<category><![CDATA[FIPS]]></category>
		<category><![CDATA[FIPS-140]]></category>
		<category><![CDATA[forloop]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[genkit]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Go1]]></category>
		<category><![CDATA[go1.18]]></category>
		<category><![CDATA[go1.21]]></category>
		<category><![CDATA[go1.23]]></category>
		<category><![CDATA[go1.24]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gomodule]]></category>
		<category><![CDATA[gopls]]></category>
		<category><![CDATA[gotcha]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[LangChain]]></category>
		<category><![CDATA[langchaingo]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[loopvar]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[mux]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[rand]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[swisstable]]></category>
		<category><![CDATA[Telemetry]]></category>
		<category><![CDATA[TIOBE]]></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=4387</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2024/11/12/go-turns-15 虽然迟到了，但绝不缺席！新任Go技术负责人Austin Clements在Go语言15岁生日后的第二天，在Go官方博客上发表了庆祝文章“Go Turns 15”。在这篇文章中，Austin回顾了过去一年Go项目和社区的变化，以及Go团队的努力工作，并对Go的未来发展进行了展望。我在此对这篇庆生文进行了翻译，供大家参考。 Go，生日快乐！ 周日，我们庆祝了Go开源15周年！ 自从Go诞生10周年以来，无论是Go语言本身还是整个世界都经历了巨大的变化。尽管如此，有些方面依然保持不变：Go始终致力于稳定性、安全性，以及支持软件工程和大规模生产。 Go语言发展势头强劲！在过去五年中，Go的用户群增加了三倍多(译注：不知道这个数据从何而来)，成为增长最快的编程语言之一。自十五年前诞生以来，Go已成为十大编程语言之一，并成为现代云计算的主要语言。 来自TIOBE 2024年11月排行榜(译者配图) 来自Github Octoverse 2024(译者配图) 随着Go 1.22版本在二月份发布和Go 1.23版本在八月份发布，这一年可被称为“for循环之年”。Go 1.22将for循环中引入变量的作用域改为每次迭代，而非整个循环，从而解决了一个长期存在的语言“陷阱”。十多年前，在Go 1发布之前，Go团队对几个语言细节做出了决策，其中就包括for循环是否应该在每次迭代中创建一个新的循环变量。有趣的是，这次讨论非常简短且没有明确的意见。Rob Pike以他一贯的风格结束了讨论，只说了一个字：“stet”（保持原样）。结果也确实如此。尽管当时看似微不足道，但多年的生产经验突显了这一决策的影响。然而，在此期间，我们还构建了强大的工具来理解对Go的变更影响，特别是在整个Google代码库中进行生态系统范围的分析和测试，并建立了与社区合作和获取反馈的流程。在经过广泛的测试、分析和社区讨论后，我们推出了这一变更，并配备了哈希二分工具，以帮助开发者在大规模代码中精确定位受影响的部分。 对for循环的变更仅是是五年演进调整的一部分。这一变更的实现得益于Go 1.21中引入的向前兼容性，而这又建立在四年半前Go 1.14发布的Go模块基础之上。 译注：Go module首次在Go 1.11版本由Russ Cox设计和实现，Go 1.14版本首次宣布Go module具备生产使用的成熟度了。 Go 1.23在此变更的基础上进一步引入了迭代器和用户定义的for-range循环。结合仅仅两年半前在Go 1.18中引入的泛型！——这为自定义集合和许多其他编程模式奠定了强大而人性化的基础。 这些版本还带来了许多生产就绪方面的改进，包括备受期待的标准库HTTP路由器增强、执行跟踪的全面重构，以及为所有Go应用程序提供更强的随机性。此外，我们的第一个v2标准库包的引入为未来的标准库演进和现代化建立了模板。 在过去的一年中，我们还谨慎地推出了Go工具的自愿使用的遥测系统。该系统将为Go开发者提供数据，以便他们做出更好的决策，同时保持完全开放和匿名。Go遥测最初出现在gopls（Go语言服务器）中，已经带来了许多改进。这项努力为使Go编程体验变得更加出色奠定了基础。 展望未来，我们正在不断演进Go，以更好地利用当前和未来硬件的能力。在过去的15年中，硬件发生了巨大的变化。为了确保Go能够在接下来的15年中继续支持高性能、大规模的生产工作负载，我们需要适应大型多核处理器、先进的指令集，以及在non-uniform内存层次结构中日益重要的局部性。其中一些改进将是透明的。Go 1.24将推出全新底层实现的map，以提高在现代CPU上的执行效率。同时，我们正在进行新的垃圾回收算法的原型设计，以适应现代硬件的能力和限制。一些改进将以新的API和工具的形式出现，以便Go开发者更好地利用现代硬件。我们正在研究如何支持最新的向量和矩阵硬件指令，以及应用程序如何构建CPU和内存的局部性。指导我们努力的一个核心原则是可组合优化(composable optimization)：优化对代码库的影响应该尽可能局部化，以确保对其余代码库开发的便捷性不受影响。 我们将继续确保Go的标准库在默认情况下是安全的，并在设计上也考虑到安全性。这包括不断努力将内置的、原生支持的FIPS认证加密功能纳入其中，使得需要FIPS加密的应用程序只需简单切换一个命令行标志即可使用。此外，我们还在不断改进Go的标准库包，并借鉴math/rand/v2的例子，考虑在哪里可以引入新的API，以显著提高编写安全和可靠的Go代码的便利性。 我们正在努力使Go在人工智能领域表现更好，同时也让人工智能更好地服务于Go，增强其在AI基础设施、应用程序和开发者辅助工具方面的能力。Go是一种非常适合构建生产系统的语言，我们希望它也能成为构建生产级AI系统的优秀语言。作为云基础设施的可靠语言，Go自然成为大型语言模型（LLM）基础设施的理想选择。针对AI应用，我们将继续在流行的AI SDK中为Go提供一流的支持，包括LangChainGo和Genkit。从一开始，Go就旨在改善端到端的软件工程过程，因此我们自然希望引入AI的最新工具和技术，以减少开发者的重复劳动，从而留出更多时间来进行更有趣的编程活动！ 感谢您！ 所有这一切的实现都离不开Go的杰出贡献者和蓬勃发展的社区。十五年前，我们只能憧憬Go所取得的成功以及围绕Go发展起来的社区。感谢每一位参与其中的人，无论贡献大小。我们祝愿大家在新的一年里一切顺利！ Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！ 著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个链接地址：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。 Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com 我的联系方式： [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/go-turns-15-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2024/11/12/go-turns-15">本文永久链接</a> &#8211; https://tonybai.com/2024/11/12/go-turns-15</p>
<p>虽然迟到了，但绝不缺席！<a href="https://tonybai.com/2024/10/10/pass-torch-to-go-new-leadership-team/">新任Go技术负责人Austin Clements</a>在Go语言15岁生日后的第二天，在Go官方博客上发表了庆祝文章“<a href="https://go.dev/blog/15years">Go Turns 15</a>”。在这篇文章中，Austin回顾了过去一年Go项目和社区的变化，以及Go团队的努力工作，并对Go的未来发展进行了展望。我在此对这篇庆生文进行了翻译，供大家参考。</p>
<hr />
<p>Go，生日快乐！</p>
<p>周日，我们庆祝了<a href="https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html">Go开源15周年</a>！</p>
<p>自从<a href="https://go.dev/blog/10years">Go诞生10周年</a>以来，无论是Go语言本身还是整个世界都经历了巨大的变化。尽管如此，有些方面依然保持不变：<strong>Go始终致力于稳定性、安全性，以及支持软件工程和大规模生产</strong>。</p>
<p>Go语言发展势头强劲！在过去五年中，Go的用户群增加了三倍多(译注：不知道这个数据从何而来)，成为增长最快的编程语言之一。自十五年前诞生以来，<a href="https://mp.weixin.qq.com/s?__biz=MzIyNzM0MDk0Mg==&amp;mid=2247497403&amp;idx=1&amp;sn=03bc972e38163e1539da765249d46586&amp;chksm=e860115adf17984cfe47f9680d8c0fb6370987ad45415ff2d38233d05fe6b315210ce6ada385#rd">Go已成为十大编程语言</a>之一，并<a href="https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/">成为现代云计算的主要语言</a>。</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-turns-15-2.png" alt="" /><br />
<center>来自TIOBE 2024年11月排行榜(译者配图)</center></p>
<p><img src="https://tonybai.com/wp-content/uploads/go-turns-15-3.png" alt="" /><br />
<center>来自Github Octoverse 2024(译者配图)</center></p>
<p>随着<a href="https://tonybai.com/2024/02/18/some-changes-in-go-1-22/">Go 1.22版本</a>在二月份发布和<a href="https://tonybai.com/2024/08/19/some-changes-in-go-1-23/">Go 1.23版本</a>在八月份发布，这一年可被称为“for循环之年”。Go 1.22将for循环中引入变量的作用域<a href="https://go.dev/blog/loopvar-preview">改为每次迭代</a>，而非整个循环，从而解决了一个长期存在的语言“陷阱”。十多年前，在Go 1发布之前，Go团队对几个语言细节做出了决策，其中就包括for循环是否应该在每次迭代中创建一个新的循环变量。有趣的是，这次讨论非常简短且没有明确的意见。Rob Pike以他一贯的风格结束了讨论，只说了一个字：“stet”（保持原样）。结果也确实如此。尽管当时看似微不足道，但多年的生产经验突显了这一决策的影响。然而，在此期间，我们还构建了强大的工具来理解对Go的变更影响，特别是在整个Google代码库中进行生态系统范围的分析和测试，并建立了与社区合作和获取反馈的流程。在经过广泛的测试、分析和社区讨论后，我们推出了这一变更，并配备了<a href="https://go.googlesource.com/proposal/+/master/design/60078-loopvar.md#transition-support-tooling">哈希二分工具</a>，以帮助开发者在大规模代码中精确定位受影响的部分。</p>
<p>对for循环的变更仅是是五年演进调整的一部分。这一变更的实现得益于<a href="https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/">Go 1.21中引入的向前兼容性</a>，而这又建立在四年半前<a href="https://tonybai.com/2020/03/08/some-changes-in-go-1-14/">Go 1.14</a>发布的<a href="https://tonybai.com/tag/gomodule">Go模块</a>基础之上。</p>
<blockquote>
<p>译注：Go module首次在Go 1.11版本由Russ Cox设计和实现，Go 1.14版本首次宣布Go module具备生产使用的成熟度了。</p>
</blockquote>
<p>Go 1.23在此变更的基础上进一步引入了<a href="https://tonybai.com/2024/06/24/range-over-func-and-package-iter-in-go-1-23/">迭代器和用户定义的for-range循环</a>。结合仅仅两年半前在Go 1.18中引入的泛型！——这为自定义集合和许多其他编程模式奠定了强大而人性化的基础。</p>
<p>这些版本还带来了许多生产就绪方面的改进，包括备受期待的<a href="https://go.dev/blog/routing-enhancements">标准库HTTP路由器增强</a>、<a href="https://go.dev/blog/execution-traces-2024">执行跟踪的全面重构</a>，以及<a href="https://go.dev/blog/chacha8rand">为所有Go应用程序提供更强的随机性</a>。此外，我们的<a href="https://go.dev/blog/randv2">第一个v2标准库包</a>的引入为未来的标准库演进和现代化建立了模板。</p>
<p>在过去的一年中，我们还谨慎地推出了Go工具的<a href="https://mp.weixin.qq.com/s?__biz=MzIyNzM0MDk0Mg==&amp;mid=2247497282&amp;idx=1&amp;sn=30e10a7091c270d5dcd5e1b3c57bdf2c&amp;chksm=e86011a3df1798b57870fedccbbda20d0a334413e15c768476a18fe9446a89432e776a8fbf1c#rd">自愿使用的遥测系统</a>。该系统将为Go开发者提供数据，以便他们做出更好的决策，同时保持<a href="https://telemetry.go.dev/">完全开放</a>和匿名。Go遥测最初出现在gopls（Go语言服务器）中，已经带来了<a href="https://github.com/golang/go/issues?q=is%3Aissue+label%3Agopls%2Ftelemetry-wins">许多改进</a>。这项努力为使Go编程体验变得更加出色奠定了基础。</p>
<p>展望未来，我们正在不断演进Go，以更好地利用当前和未来硬件的能力。在过去的15年中，硬件发生了巨大的变化。为了确保Go能够在接下来的15年中继续支持高性能、大规模的生产工作负载，我们需要适应大型多核处理器、先进的指令集，以及在non-uniform内存层次结构中日益重要的局部性。其中一些改进将是透明的。Go 1.24将推出全新底层实现的map，以提高在现代CPU上的执行效率。同时，我们正在进行新的垃圾回收算法的原型设计，以适应现代硬件的能力和限制。一些改进将以新的API和工具的形式出现，以便Go开发者更好地利用现代硬件。我们正在研究如何支持最新的向量和矩阵硬件指令，以及应用程序如何构建CPU和内存的局部性。指导我们努力的一个核心原则是<strong>可组合优化(composable optimization)</strong>：优化对代码库的影响应该尽可能局部化，以确保对其余代码库开发的便捷性不受影响。</p>
<p>我们将继续确保Go的标准库在默认情况下是安全的，并在设计上也考虑到安全性。这包括不断努力将内置的、原生支持的FIPS认证加密功能纳入其中，使得需要FIPS加密的应用程序只需简单切换一个命令行标志即可使用。此外，我们还在不断改进Go的标准库包，并借鉴math/rand/v2的例子，考虑在哪里可以引入新的API，以显著提高编写安全和可靠的Go代码的便利性。</p>
<p>我们正在努力使Go在人工智能领域表现更好，同时也让人工智能更好地服务于Go，增强其在AI基础设施、应用程序和开发者辅助工具方面的能力。Go是一种非常适合构建生产系统的语言，我们希望它也能成为<a href="https://go.dev/blog/llmpowered">构建生产级AI系统</a>的优秀语言。作为云基础设施的可靠语言，Go自然成为<a href="https://ollama.com/">大型语言模型（LLM）基础设施</a>的理想选择。针对AI应用，我们将继续在流行的AI SDK中为Go提供一流的支持，包括<a href="https://pkg.go.dev/github.com/tmc/langchaingo">LangChainGo</a>和<a href="https://developers.googleblog.com/en/introducing-genkit-for-go-build-scalable-ai-powered-apps-in-go/">Genkit</a>。从一开始，Go就旨在改善端到端的软件工程过程，因此我们自然希望引入AI的最新工具和技术，以减少开发者的重复劳动，从而留出更多时间来进行更有趣的编程活动！</p>
<p>感谢您！</p>
<p>所有这一切的实现都离不开Go的杰出贡献者和蓬勃发展的社区。十五年前，我们只能憧憬Go所取得的成功以及围绕Go发展起来的社区。感谢每一位参与其中的人，无论贡献大小。我们祝愿大家在新的一年里一切顺利！</p>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
<li>Gopher Daily Feed订阅 &#8211; https://gopherdaily.tonybai.com/feed</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2024, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2024/11/12/go-turns-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从DevOps到日常脚本：聊聊Go语言的多面性</title>
		<link>https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts/</link>
		<comments>https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts/#comments</comments>
		<pubDate>Mon, 07 Oct 2024 22:46:09 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[binfmt_misc]]></category>
		<category><![CDATA[Channel]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[gobuild]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gomacro]]></category>
		<category><![CDATA[gomodule]]></category>
		<category><![CDATA[gore]]></category>
		<category><![CDATA[goroutine]]></category>
		<category><![CDATA[gorun]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PlatformEngineering]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[reddit]]></category>
		<category><![CDATA[REPL]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SheBang]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[yaegi]]></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=4322</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts 2024年初，TIOBE编程语言排行榜上，Go再次进入了前十，并在之后又成功冲高至第七名。 Go语言的排名上升，至少在Reddit Go论坛上帖子数量和在线人数上得到了体现，尽管目前与Rust热度仍有差距，但可见Go的关注度在提升： 2024年国庆节假期某天下午的实时在线数对比 随着Go语言人气的上升，论坛中的问题也变得愈发多样化。许多Gopher常常问及为何Go是DevOps语言和Go适合用作脚本语言吗等问题，这些都反映了Go语言的多面性。 从最初的系统编程语言，到如今在DevOps领域的广泛应用，再到一些场合被探索用作脚本语言，Go展现出了令人惊叹的灵活性和适应性。在本篇文章中，我们将聚焦于Go语言在DevOps领域的应用以及它作为脚本替代语言的潜力，聊聊其强大多面性如何满足这些特定场景的需求。 1. Go在DevOps中的优势 随着DevOps的发展，平台工程(Platform Engineering)这一新兴概念逐渐兴起。在自动化任务、微服务部署和系统管理中，编程语言的作用变得愈发重要。Go语言凭借其高性能、并发处理能力以及能够编译成单一二进制文件的特点，越来越受到DevOps领域开发人员的青睐，成为开发DevOps工具链的重要组成部分。 首先，Go的跨平台编译能力使得DevOps团队可以在一个平台上编译，然后在多个不同的操作系统和架构上运行，结合编译出的单一可执行文件的能力，大大简化了部署流程，这也是很多Go开发者认为Go适合DevOps的第一优势： $GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go $GOOS=linux GOARCH=arm64 go build -o myapp-linux-arm64 main.go $GOOS=darwin GOARCH=amd64 go build -o myapp-darwin-amd64 main.go $GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exe main.go 其次，Go的标准库仿佛“瑞士军刀”，开箱即用，为DevOps场景提供了所需的丰富的网络、加密和系统操作功能库，大幅降低对外部的依赖，即便不使用第三方包生态系统，也可以满足大部分的DevOps功能需求。 此外，Go的goroutines和channels为处理高并发任务提供了极大便利，这在DevOps中也尤为重要。例如，以下代码展示了如何使用goroutines并发检查多个服务的健康状态： func checkServices(services []string) { var wg sync.WaitGroup for _, service := [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/go-languages-versatility-from-devops-to-daily-scripts-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts">本文永久链接</a> &#8211; https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts</p>
<p>2024年初，TIOBE编程语言排行榜上，<a href="https://mp.weixin.qq.com/s?__biz=MzIyNzM0MDk0Mg==&amp;mid=2247497403&amp;idx=1&amp;sn=03bc972e38163e1539da765249d46586&amp;chksm=e860115adf17984cfe47f9680d8c0fb6370987ad45415ff2d38233d05fe6b315210ce6ada385#rd">Go再次进入了前十，并在之后又成功冲高至第七名</a>。</p>
<p>Go语言的排名上升，至少在<a href="https://www.reddit.com/r/golang/">Reddit Go论坛</a>上帖子数量和在线人数上得到了体现，尽管目前与<a href="https://tonybai.com/tag/rust">Rust</a>热度仍有差距，但可见Go的关注度在提升：</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-languages-versatility-from-devops-to-daily-scripts-2.png" alt="" /><br />
<center>2024年国庆节假期某天下午的实时在线数对比</center></p>
<p>随着Go语言人气的上升，论坛中的问题也变得愈发多样化。许多Gopher常常问及<a href="https://www.reddit.com/r/golang/comments/1fqwbv0/why_is_golang_the_language_of_devops/">为何Go是DevOps语言</a>和<a href="https://www.reddit.com/r/golang/comments/1ftpk2m/do_you_use_go_for_scripts/">Go适合用作脚本语言吗</a>等问题，这些都反映了Go语言的多面性。</p>
<p>从最初的系统编程语言，到如今在DevOps领域的广泛应用，再到一些场合被探索用作脚本语言，Go展现出了令人惊叹的灵活性和适应性。在本篇文章中，我们将聚焦于Go语言在DevOps领域的应用以及它作为脚本替代语言的潜力，聊聊其强大多面性如何满足这些特定场景的需求。</p>
<h2>1. Go在DevOps中的优势</h2>
<p>随着DevOps的发展，<a href="https://en.wikipedia.org/wiki/Platform_engineering">平台工程(Platform Engineering)</a>这一新兴概念逐渐兴起。在自动化任务、微服务部署和系统管理中，编程语言的作用变得愈发重要。Go语言凭借其高性能、并发处理能力以及能够编译成单一二进制文件的特点，越来越受到DevOps领域开发人员的青睐，成为开发DevOps工具链的重要组成部分。</p>
<p>首先，Go的跨平台编译能力使得DevOps团队可以在一个平台上编译，然后在多个不同的操作系统和架构上运行，结合<strong>编译出的单一可执行文件</strong>的能力，大大简化了部署流程，这也是很多Go开发者认为Go适合DevOps的第一优势：</p>
<pre><code>$GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go
$GOOS=linux GOARCH=arm64 go build -o myapp-linux-arm64 main.go
$GOOS=darwin GOARCH=amd64 go build -o myapp-darwin-amd64 main.go
$GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exe main.go
</code></pre>
<p>其次，Go的标准库仿佛“瑞士军刀”，开箱即用，<strong>为DevOps场景提供了所需的丰富的网络、加密和系统操作功能库</strong>，大幅降低对外部的依赖，即便不使用第三方包生态系统，也可以满足大部分的DevOps功能需求。</p>
<p>此外，Go的goroutines和channels为处理高并发任务提供了极大便利，这在DevOps中也尤为重要。例如，以下代码展示了如何使用goroutines并发检查多个服务的健康状态：</p>
<pre><code>func checkServices(services []string) {
    var wg sync.WaitGroup
    for _, service := range services {
        wg.Add(1)
        go func(s string) {
            defer wg.Done()
            if err := checkHealth(s); err != nil {
                log.Printf("Service %s is unhealthy: %v", s, err)
            } else {
                log.Printf("Service %s is healthy", s)
            }
        }(service)
    }
    wg.Wait()
}
</code></pre>
<p>并且，许多知名的DevOps基础设施、中间件和工具都是用Go编写的，如Docker、Kubernetes、Prometheus等，集成起来非常丝滑。这些工具的成功进一步证明了Go在DevOps领域的适用性。</p>
<h2>2. Go作为脚本语言的潜力</h2>
<p>在传统的DevOps任务中，Python和Shell脚本长期以来都是主力军，它们(尤其是Python)以其简洁的语法和丰富的生态系统赢得了DevOps社区的广泛青睐。然而，传统主力Python和Shell脚本虽然灵活易用，但在处理大规模数据或需要高性能的场景时往往力不从心。此外，它们的动态类型系统可能导致运行时错误，增加了调试难度。</p>
<p>随着Go的普及，它的“超高性价比”逐渐被开发运维人员所接受：<strong>既有着接近于脚本语言的较低的学习曲线与较高的生产力(也得益于Go超快的编译速度)，又有着静态语言的高性能，还有单一文件在部署方面的便利性</strong>。</p>
<p>下面是一个简单的文件处理脚本，用于向大家展示Go的简单易学：</p>
<pre><code>package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    file, err := os.Open("input.txt")
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        line := scanner.Text()
        if strings.Contains(line, "ERROR") {
            fmt.Println(line)
        }
    }
}
</code></pre>
<p>这个示例虽然要比同等功能的Python或shell代码行数要多，但由于Go的简单和直观，多数人都很容易看懂这段代码。</p>
<p>此外，Go的静态强类型系统可以在编译时捕获更多错误，避免在运行时的调试，提高了脚本在运行时的可靠性。</p>
<p>开发运维人员眼中的脚本语言，如Shell脚本和Python脚本，通常是直接基于源代码进行解释和运行的。实际上，Go语言同样可以实现这一点，而其关键工具就是go run命令。这个命令允许开发者快速执行Go代码，从而使Go源码看起来更像是“脚本”，下面我们就来看看go run。</p>
<h2>3. go run：桥接编译型语言与脚本语言的利器</h2>
<p>我们知道go run命令实际上是编译和运行的组合，它<strong>首先编译源代码，然后立即执行生成的二进制文件</strong>。这个过程对用户来说是透明的，使得Go程序可以像脚本一样方便地运行。这一命令也大大简化了Go程序的开发流程，使Go更接近传统的脚本语言工作流。可以说，通过go run，Go语言向脚本语言的使用体验更靠近了一步。</p>
<p>此外，go run与go build在编译阶段的行为并不完全相同：</p>
<ul>
<li>
<p>go run在运行结束后，不保留编译后的二进制文件；而go build生成可执行文件并保留。</p>
</li>
<li>
<p>go run编译时<strong>默认不包含调试信息，以减少构建时间</strong>；而go build则保留完整的调试信息。</p>
</li>
<li>
<p>go run可以使用-exec标志指定运行环境，比如：</p>
</li>
</ul>
<pre><code>$go run -exec="ls" main.go
/var/folders/cz/sbj5kg2d3m3c6j650z0qfm800000gn/T/go-build1742641170/b001/exe/main
</code></pre>
<p>我们看到，如果设置了-exec标志，那么go run -exec=”prog” main.go args编译后的命令执行就变为了”prog a.out args”。go run还支持跨平台模拟执行，当GOOS或GOARCH与系统默认值不同时，如果在\$PATH路径下存在名为”go_\$GOOS_\$GOARCH_exec”的程序，那么go run就会执行：</p>
<pre><code>$go_$GOOS_$GOARCH_exec a.out args

比如：go_js_wasm_exec a.out args
</code></pre>
<ul>
<li>
<p>go run通常用于运行main包，在go module开启的情况下，go run使用的是main module的上下文。go build可以编译多个包，对于非main包时只检查构建而不生成输出</p>
</li>
<li>
<p>go run还支持运行一个指定版本号的包</p>
</li>
</ul>
<p>当指定了版本后缀（如@v1.0.0或@latest）时，go run会进入module-aware mode（模块感知模式），并忽略当前目录或上级目录中的go.mod文件。这意味着，即使你当前的项目中存在依赖管理文件go.mod，go run也不会影响或修改当前项目的依赖关系，下面这个示例展示了这一点：</p>
<pre><code>$go run golang.org/x/example/hello@latest

go: downloading golang.org/x/example v0.0.0-20240925201653-1a5e218e5455
go: downloading golang.org/x/example/hello v0.0.0-20240925201653-1a5e218e5455
Hello, world!
</code></pre>
<p>这个功能特别适合在不影响主模块依赖的情况下，临时运行某个工具或程序。例如，如果你只是想测试某个工具的特定版本，或者快速运行一个远程程序包，而不希望它干扰你正在开发的项目中的依赖项，这种方式就很实用。</p>
<p>不过有一点要注意的是：go run的退出状态并不等于编译后二进制文件的退出状态，看下面这个示例：</p>
<pre><code>// main.go成功退出
$go run main.go
Hello from myapp!
$echo $?
0

// main.go中调用os.Exit(2)退出
$go run main.go
Hello from myapp!
exit status 2
$echo $?
1
</code></pre>
<p>go run使用退出状态1来表示其运行程序的异常退出状态，但这个值和真实的exit的状态值不相等。</p>
<p>到这里我们看到，go run xxx.go可以像bash xxx.sh或python xxx.py那样，以“解释”方式运行一个Go源码文件。这使得Go语言在某种程度上具备了脚本语言的特性。然而，在脚本语言中，例如Bash或Python等，用户可以通过将源码文件设置为可执行，并在文件的首行添加适当的解释器指令，从而直接运行脚本，而无需显式调用解释器。这种灵活性使得脚本的执行变得更加简便。那么Go是否也可以做到这一点呢？我们继续往下看。</p>
<h2>4. Go脚本化的实现方式</h2>
<p>下面是通过一些技巧或第三方工具实现Go脚本化的方法。对于喜欢使用脚本的人来说，最熟悉的莫过于shebang（即解释器指令）。在许多脚本语言中，通过在文件的第一行添加指定的解释器路径，可以直接运行脚本，而无需显式调用解释器。例如，在Bash或Python脚本中，通常会看到这样的行：</p>
<pre><code>#!/usr/bin/env python3
</code></pre>
<p>那么Go语言支持shebang吗? 是否可以实现实现类似的效果呢？我们下面来看看。</p>
<h3>4.1 使用“shebang(#!)”运行Go脚本</h3>
<p>很遗憾，Go不能直接支持shebang，我们看一下这个示例main.go：</p>
<pre><code>#!/usr/bin/env go run 

package main

import (
    "fmt"
    "os"
)

func main() {
    s := "world"
    if len(os.Args) &gt; 1 {
        s = os.Args[1]
    }
    fmt.Printf("Hello, %v!\n", s)
}
</code></pre>
<p>这一示例的第一行就是一个shebang解释器指令，我们chmod u+x main.go，然后执行该Go“脚本”：</p>
<pre><code>$./main.go
main.go:1:1: illegal character U+0023 '#'
</code></pre>
<p>这个执行过程中，Shell可以正常识别shebang，然后调用go run去运行main.go，问题就在于go编译器视shebang这一行为非法语法！</p>
<p>常规的shebang写法行不通，我们就使用一些trick，下面是改进后的示例：</p>
<pre><code>//usr/bin/env go run $0 $@; exit

package main

import (
    "fmt"
    "os"
)

func main() {
    s := "world"
    if len(os.Args) &gt; 1 {
        s = os.Args[1]
    }
    fmt.Printf("Hello, %v!\n", s)
}
</code></pre>
<p>这段代码则可以chmod +x 后直接运行：</p>
<pre><code>$./main.go
Hello, world!
$./main.go gopher
Hello, gopher!
</code></pre>
<p>这是因为它巧妙地结合了shell脚本和Go代码的特性。我们来看一下第一行：</p>
<pre><code>//usr/bin/env go run $0 $@; exit
</code></pre>
<p>这一行看起来像是Go的注释，但实际上是一个shell命令。当文件被执行时，shell会解释这一行，/usr/bin/env用于寻找go命令的路径，go run \$0 \$@ 告诉go命令运行当前脚本文件(\$0)以及所有传递给脚本的参数(\$@)，当go run编译这个脚本时，又会将第一行当做注释行而忽略，这就是关键所在。最后的exit确保shell在Go程序执行完毕后退出。如果没有exit，shell会执行后续Go代码，那显然会导致报错！</p>
<p>除了上述trick外，我们还可以将Go源码文件注册为可执行格式(仅在linux上进行了测试)，下面就是具体操作步骤。</p>
<h3>4.2 在Linux系统中注册Go为可执行格式</h3>
<p>就像在Windows上双击某个文件后，系统打开特定程序处理对应的文件一样，我们也可以将Go源文件(xxx.go)注册为可执行格式，并指定用于处理该文件的程序。实现这一功能，我们需要借助binfmt_misc。binfmt_misc是Linux内核的一个功能，允许用户注册新的可执行文件格式。这使得Linux系统能够识别并执行不同类型的可执行文件，比如脚本、二进制文件等。</p>
<p>我们用下面命令将Go源文件注册到binfmt_misc中：</p>
<pre><code>echo ':golang:E::go::/usr/local/bin/gorun:OC' | sudo tee /proc/sys/fs/binfmt_misc/register
</code></pre>
<p>简单解释一下上述命令：</p>
<ul>
<li>:golang:：这是注册的格式的名称，可以自定义。</li>
<li>E::：表示执行文件的魔数（magic number），在这里为空，表示任何文件类型。</li>
<li>go::：指定用于执行的解释器，这里是go命令。</li>
<li>/usr/local/bin/gorun：指定用于执行的程序路径，这里是一个自定义的gorun脚本</li>
<li>:OC：表示这个格式是可执行的（O）并且支持在运行时创建（C）。</li>
</ul>
<p>当你执行一个Go源文件时，Linux内核会检查文件的类型。如果文件的格式与注册的格式匹配，内核会调用指定的解释器（在这个例子中是gorun）来执行该文件。</p>
<p>gorun脚本是我们自己编写的，源码如下：</p>
<pre><code>#!/bin/bash

# 检查是否提供了源文件
if [ -z "$1" ]; then
  echo "用法: gorun &lt;go源文件&gt; [参数...]"
  exit 1
fi

# 检查文件是否存在
if [ ! -f "$1" ]; then
  echo "错误: 文件 $1 不存在"
  exit 1
fi

# 将第一个参数作为源文件，剩余的参数作为执行参数
GO_FILE="$1"
shift  # 移除第一个参数，剩余的参数将会被传递

# 使用go run命令执行Go源文件，传递其余参数
go run "$GO_FILE" "$@"
</code></pre>
<p>将gorun脚本放置带/usr/local/bin下，并chmod +x使其具有可执行权限。</p>
<p>接下来，我们就可以直接执行不带有”shebang”的正常go源码了：</p>
<pre><code>// main.go
package main

import (
    "fmt"
    "os"
)

func main() {
      s := "world"
      if len(os.Args) &gt; 1 {
          s = os.Args[1]
      }
      fmt.Printf("Hello, %v!\n", s)
}
</code></pre>
<p>直接执行上述源文件：</p>
<pre><code>$ ./main.go
Hello, world!
$ ./main.go gopher
Hello, gopher!
</code></pre>
<h3>4.3 第三方工具支持</h3>
<p>Go社区也有一些将支持将Go源文件视为脚本的解释器工具，比如：<a href="https://github.com/traefik/yaegi">traefik/yaegi</a>等。</p>
<pre><code>$go install github.com/traefik/yaegi/cmd/yaegi@latest
go: downloading github.com/traefik/yaegi v0.16.1
$yaegi main.go
Hello, main.go!
</code></pre>
<p>yaegi还可以像python那样，提供Read-Eval-Print-Loop功能，我们可以与yaegi配合进行交互式“Go脚本”编码：</p>
<pre><code>$ yaegi
&gt; 1+2
: 3
&gt; import "fmt"
: 0xc0003900d0
&gt; fmt.Println("hello, golang")
hello, golang
: 14
&gt;
</code></pre>
<p>类似的提供REPL功能的第三方Go解释器还包括：<a href="https://github.com/cosmos72/gomacro">cosmos72/gomacro</a>、<a href="https://github.com/x-motemen/gore">x-motemen/gore</a>等，这里就不深入介绍了，感兴趣的童鞋可以自行研究。</p>
<h2>5. 小结</h2>
<p>在本文中，我们探讨了Go语言在DevOps和日常脚本编写中的多面性。首先，Go语言因其高性能、并发处理能力及跨平台编译特性，成为DevOps领域的重要工具，助力于自动化任务和微服务部署。其次，随着Go语言的普及，其作为脚本语言的潜力逐渐被开发运维人员认识，Go展现出了优于传统脚本语言的高效性和可靠性。</p>
<p>我们还介绍了Go脚本的实现方式，包括使用go run命令，它使得Go程序的执行更像传统脚本语言，同时也探讨了一些技巧和工具，帮助开发者将Go源码文件作为可执行脚本直接运行。通过这些探索，我们可以看到Go语言在现代开发中的灵活应用及其日益增长的吸引力。</p>
<p>随着AI能力的飞速发展，使用Go编写一个日常脚本就是分分钟的事情，但Go的特性让这样的脚本具备了传统脚本语言所不具备的并发性、可靠性和性能优势。我们有理由相信，Go在DevOps和脚本编程领域的应用将会越来越广泛，为开发者带来更多的可能性和便利。</p>
<h2>6. 参考资料</h2>
<ul>
<li><a href="https://blog.cloudflare.com/using-go-as-a-scripting-language-in-linux/">Using Go as a scripting language in Linux</a> &#8211; https://blog.cloudflare.com/using-go-as-a-scripting-language-in-linux/</li>
<li><a href="https://www.infoq.com/news/2020/04/go-scripting-language/">Go as a Scripting Language</a> &#8211; https://www.infoq.com/news/2020/04/go-scripting-language/</li>
<li><a href="https://utcc.utoronto.ca/~cks/space/blog/sysadmin/SysadminGoVsPython">Go compared to Python for small scale system administration scripts and tools</a> &#8211; https://utcc.utoronto.ca/~cks/space/blog/sysadmin/SysadminGoVsPython</li>
</ul>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
<li>Gopher Daily Feed订阅 &#8211; https://gopherdaily.tonybai.com/feed</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2024, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>都2024年了，当初那个“Go，互联网时代的C语言”的预言成真了吗？</title>
		<link>https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/</link>
		<comments>https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/#comments</comments>
		<pubDate>Fri, 16 Aug 2024 22:17:02 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[caddy]]></category>
		<category><![CDATA[calico]]></category>
		<category><![CDATA[cilium]]></category>
		<category><![CDATA[cloudnative]]></category>
		<category><![CDATA[cockroachdb]]></category>
		<category><![CDATA[consul]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[containerd]]></category>
		<category><![CDATA[CoreDNS]]></category>
		<category><![CDATA[cortex]]></category>
		<category><![CDATA[dagger]]></category>
		<category><![CDATA[Dgraph]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[dragonfly]]></category>
		<category><![CDATA[etcd]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[gohugo]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[goplus]]></category>
		<category><![CDATA[harbor]]></category>
		<category><![CDATA[InfluxDB]]></category>
		<category><![CDATA[istio]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[juicefs]]></category>
		<category><![CDATA[junodb]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[linkerd2]]></category>
		<category><![CDATA[longhorn]]></category>
		<category><![CDATA[mattermost]]></category>
		<category><![CDATA[Milvus]]></category>
		<category><![CDATA[minio]]></category>
		<category><![CDATA[nats]]></category>
		<category><![CDATA[nsq]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[opentelemetry]]></category>
		<category><![CDATA[opentofu]]></category>
		<category><![CDATA[Otel]]></category>
		<category><![CDATA[podman]]></category>
		<category><![CDATA[prometheus]]></category>
		<category><![CDATA[rook]]></category>
		<category><![CDATA[terraform]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[traefik]]></category>
		<category><![CDATA[VictoriaMetrics]]></category>
		<category><![CDATA[vitess]]></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=4248</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true 本文最初发表于我个人的微信公众号(iamtonybai)，但鉴于图片消息的篇幅受限(&#60;=1000字)，一些内容没能如愿展开，这里在博客上重新发布一下，也顺道丰富一下文章的内容。 2012年，七牛云创始人、goplus语言之父许式伟在一次演讲中给出一个大胆的预言：“Go，互联网时代的C语言”。 十余年过去了，我们不禁要问：当初的那个预言是否已经成真？ 在讨论这个预言之前，我们先来看在同一份演讲稿中，老许给出的另外三个预判： 它们是： Java语言份额继续下滑，最终被C和Go语言超越； C语言将长居编程榜第二的位置，有望在Go取代Java前重获第一的宝座； Go语言最终会取代Java位居编程榜榜首。 编程语言排行榜有很多，我们就以名气最大的TIOBE刚刚发布的2024年8月排行榜为例，看看这些预判是否成真。 很遗憾，一个也没命中。 在这份最新榜单中，C位列第三、Java位列第四，Go位列第九，相对于前两个月的第七还下降了两位。不过不得不说，老许对C语言的预判还是相对准确的。 那这是否意味着老许最初的那个预言也Miss了呢？个人觉得：并没有。因为这要看从哪个角度来审视。 传统观点认为，C语言被视为系统编程语言的杰出代表，因其卓越的底层操作能力和极致性能而广受推崇。它允许开发者直接与硬件交互，提供了高效的资源管理和快速的执行速度。如果从这样的视角去看待那则预言，那显然Go与“互联网时代C语言”这个评价和地位是不相称的。虽然Go最初的定位也是一门系统编程语言。 但如果我们跳出以“低级操作和性能”为中心的比较框架，而是从不同时代软件技术栈的层次与构建来看，Go与C语言的地位又极其的相似。 在互联网时代到来之前，C语言已经是整个软件技术栈的基石：从操作系统内核、设备驱动程序、中间件到应用程序，C语言凭借卓越的性能、无以伦比的生态，在技术栈的各个层次都有着广泛且核心的应用。 当时针指向云原生时代时，Go语言在云原生技术栈的构建中，发挥了与C语言相似的作用： 云原生“操作系统”：Kubernetes； 云原生“驱动程序”：容器运行时（docker、containerd、podman）、网络插件(Calico、cilium、CoreDNS等)、存储插件（Rook、longhorn等）； 云原生“中间件”：数据库(CockroachDB、Vitess、InfluxDB(2.x)、VictoriaMetrics、Dgraph、milvus等)、消息队列(NATS、nsq等)、服务网格(Istio、linkerd2)、API网关/代理(Traefik、emissary等)、镜像仓库/加速器(harbor、Dragonfly)、key-value存储(Etcd、consul、junodb)、安全相关(falco、OPA、vault)、可观测组件(OpenTelemetry、Prometheus、Thanos、Cortex等)、基础设施管理(terraform、dagger)、分布式存储(minio、SeaweedFS、juicefs)、AI大模型运维(ollama)。 应用层：Caddy、gohugo、mattermost等。 我们用一张示意图来横向对比一下： 听我讲到这里，你是不是觉得老许的那个预言好像命中了呢！ 当然，从狭义的角度来看，Go与C还有一些地方是很像的，比如：语法简单、跨平台可移植性好等。并且两者还“沾亲带故”：Unix之父Ken Thompson当年和Dennis Ritchie一起发明了C语言，又和Rob Pike等一起设计了Go语言！ 最后，回顾许式伟2012年的预言，我们不得不惊叹于其洞察力。Go语言确实在很大程度上成为了”互联网时代的C语言”，但不是通过传统的性能优势，而是通过重新构建了云原生技术栈，从这个角度看，Go语言也不失为云原生时代的”系统语言” —— 它不仅能够优雅地处理分布式系统的复杂性，它还使得构建和维护大规模、高可靠性的分布式系统变得更为简单，是云原生时代的思维方式和解决方案的集大成者，某种程度上还可以说定义了云原生时代的软件开发范式。 Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！ 著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个链接地址：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。 Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com 我的联系方式： 微博(暂不可用)：https://weibo.com/bigwhite20xx 微博2：https://weibo.com/u/6484441286 博客：tonybai.com github: https://github.com/bigwhite Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily Gopher Daily Feed订阅 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/go-the-c-language-of-the-internet-era-come-true-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true">本文永久链接</a> &#8211; https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true</p>
<p><a href="https://mp.weixin.qq.com/s/GTXSNoPTmJ-mprMKAY8esw">本文最初发表于我个人的微信公众号(iamtonybai)</a>，但鉴于图片消息的篇幅受限(&lt;=1000字)，一些内容没能如愿展开，这里在博客上重新发布一下，也顺道丰富一下文章的内容。</p>
<hr />
<p>2012年，<a href="https://www.qiniu.com/">七牛云</a>创始人、<a href="https://github.com/goplus/gop">goplus语言</a>之父<a href="https://github.com/xushiwei">许式伟</a>在一次演讲中给出一个大胆的预言：“<strong>Go，互联网时代的C语言</strong>”。</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-the-c-language-of-the-internet-era-come-true-2.png" alt="" /></p>
<p>十余年过去了，我们不禁要问：当初的那个预言是否已经成真？</p>
<p>在讨论这个预言之前，我们先来看在同一份演讲稿中，老许给出的另外三个预判：</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-the-c-language-of-the-internet-era-come-true-3.png" alt="" /></p>
<p>它们是：</p>
<ul>
<li>Java语言份额继续下滑，最终被C和Go语言超越；</li>
<li>C语言将长居编程榜第二的位置，有望在Go取代Java前重获第一的宝座；</li>
<li>Go语言最终会取代Java位居编程榜榜首。</li>
</ul>
<p>编程语言排行榜有很多，我们就以名气最大的<a href="https://www.tiobe.com/tiobe-index/">TIOBE</a>刚刚发布的2024年8月排行榜为例，看看这些预判是否成真。</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-the-c-language-of-the-internet-era-come-true-4.png" alt="" /></p>
<p>很遗憾，<strong>一个也没命中</strong>。</p>
<p>在这份最新榜单中，C位列第三、Java位列第四，Go位列第九，<a href="https://mp.weixin.qq.com/s?__biz=MzIyNzM0MDk0Mg==&amp;mid=2247497403&amp;idx=1&amp;sn=03bc972e38163e1539da765249d46586&amp;chksm=e860115adf17984cfe47f9680d8c0fb6370987ad45415ff2d38233d05fe6b315210ce6ada385#rd">相对于前两个月的第七</a>还下降了两位。不过不得不说，老许对C语言的预判还是相对准确的。</p>
<p>那这是否意味着老许最初的那个预言也Miss了呢？个人觉得：<strong>并没有</strong>。因为这要看从哪个角度来审视。</p>
<p>传统观点认为，C语言被视为系统编程语言的杰出代表，因其卓越的底层操作能力和极致性能而广受推崇。它允许开发者直接与硬件交互，提供了高效的资源管理和快速的执行速度。如果从这样的视角去看待那则预言，那显然Go与“互联网时代C语言”这个评价和地位是不相称的。虽然<a href="https://go.dev/talks/2012/splash.article">Go最初的定位也是一门系统编程语言</a>。</p>
<p>但如果我们跳出以“低级操作和性能”为中心的比较框架，而是<strong>从不同时代软件技术栈的层次与构建来看，Go与C语言的地位又极其的相似</strong>。</p>
<p>在互联网时代到来之前，C语言已经是整个软件技术栈的基石：从操作系统内核、设备驱动程序、中间件到应用程序，C语言凭借卓越的性能、无以伦比的生态，在技术栈的各个层次都有着广泛且核心的应用。</p>
<p>当时针指向云原生时代时，<strong>Go语言在云原生技术栈的构建中，发挥了与C语言相似的作用</strong>：</p>
<ul>
<li>云原生“操作系统”：<a href="https://mp.weixin.qq.com/s/paOduv0t1CtBCUoUBfJ7rQ">Kubernetes</a>；</li>
<li>云原生“驱动程序”：容器运行时（<a href="https://tonybai.com/tag/docker">docker</a>、<a href="https://github.com/containerd/containerd">containerd</a>、<a href="https://github.com/containers/podman">podman</a>）、网络插件(<a href="https://github.com/projectcalico/calico">Calico</a>、<a href="https://github.com/cilium/cilium">cilium</a>、<a href="https://github.com/coredns/coredns">CoreDNS</a>等)、存储插件（<a href="https://github.com/rook/rook">Rook</a>、<a href="https://github.com/longhorn/longhorn?tab=readme-ov-file">longhorn</a>等）；</li>
<li>云原生“中间件”：数据库(<a href="https://github.com/cockroachdb/cockroach">CockroachDB</a>、<a href="https://github.com/vitessio/vitess">Vitess</a>、<a href="https://github.com/influxdata/influxdb/tree/main-2.x">InfluxDB(2.x)</a>、<a href="https://github.com/VictoriaMetrics/VictoriaMetrics">VictoriaMetrics</a>、<a href="https://github.com/dgraph-io/dgraph">Dgraph</a>、<a href="https://github.com/milvus-io/milvus">milvus</a>等)、消息队列(<a href="https://github.com/nats-io/nats-server">NATS</a>、<a href="https://github.com/nsqio/nsq">nsq</a>等)、服务网格(<a href="https://tonybai.com/2018/01/03/an-intro-of-microservices-governance-by-istio">Istio</a>、<a href="https://github.com/linkerd/linkerd2">linkerd2</a>)、API网关/代理(<a href="https://github.com/traefik/traefik">Traefik</a>、<a href="https://github.com/emissary-ingress/emissary">emissary</a>等)、镜像仓库/加速器(<a href="https://tonybai.com/2017/10/23/the-speech-script-practice-on-deploying-a-ha-harbor-cluster-for-osc-shenyang-2017/">harbor</a>、<a href="https://github.com/dragonflyoss/Dragonfly2">Dragonfly</a>)、key-value存储(<a href="https://github.com/etcd-io/etcd">Etcd</a>、<a href="https://github.com/hashicorp/consul">consul</a>、<a href="https://github.com/paypal/junodb">junodb</a>)、安全相关(<a href="https://github.com/falcosecurity/falco">falco</a>、<a href="https://github.com/open-policy-agent/opa">OPA</a>、<a href="https://github.com/hashicorp/vault">vault</a>)、可观测组件(<a href="https://github.com/open-telemetry/community">OpenTelemetry</a>、<a href="https://github.com/prometheus/prometheus">Prometheus</a>、<a href="https://github.com/thanos-io/thanos">Thanos</a>、<a href="https://github.com/cortexproject/cortex">Cortex</a>等)、基础设施管理(<a href="https://github.com/hashicorp/terraform">terraform</a>、<a href="https://github.com/dagger/dagger">dagger</a>)、分布式存储(<a href="https://github.com/minio/">minio</a>、<a href="https://github.com/seaweedfs/seaweedfs">SeaweedFS</a>、<a href="https://github.com/juicedata/juicefs">juicefs</a>)、AI大模型运维(<a href="https://github.com/ollama/ollama">ollama</a>)。</li>
<li>应用层：<a href="https://github.com/caddyserver/caddy">Caddy</a>、<a href="https://github.com/gohugoio/hugo">gohugo</a>、<a href="https://github.com/mattermost/mattermost">mattermost</a>等。</li>
</ul>
<p>我们用一张示意图来横向对比一下：</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-the-c-language-of-the-internet-era-come-true-5.png" alt="" /></p>
<p>听我讲到这里，你是不是觉得老许的那个预言好像命中了呢！</p>
<p>当然，从狭义的角度来看，Go与C还有一些地方是很像的，比如：语法简单、跨平台可移植性好等。并且两者还“沾亲带故”：Unix之父Ken Thompson当年和Dennis Ritchie一起发明了C语言，又和Rob Pike等一起设计了Go语言！</p>
<p>最后，回顾许式伟2012年的预言，我们不得不惊叹于其洞察力。Go语言确实在很大程度上成为了”互联网时代的C语言”，但不是通过传统的性能优势，而是通过<strong>重新构建了云原生技术栈</strong>，从这个角度看，Go语言也不失为云原生时代的”系统语言” —— 它不仅能够优雅地处理分布式系统的复杂性，它还使得构建和维护大规模、高可靠性的分布式系统变得更为简单，是云原生时代的思维方式和解决方案的集大成者，某种程度上还可以说定义了云原生时代的软件开发范式。</p>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
<li>Gopher Daily Feed订阅 &#8211; https://gopherdaily.tonybai.com/feed</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2024, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gopher的Rust第一课：Rust的那些事儿</title>
		<link>https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust/</link>
		<comments>https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust/#comments</comments>
		<pubDate>Sun, 21 Apr 2024 22:04:31 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AUTOSAR]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cargo]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[Cpp]]></category>
		<category><![CDATA[crate]]></category>
		<category><![CDATA[crates.io]]></category>
		<category><![CDATA[Ferris]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GraydonHoare]]></category>
		<category><![CDATA[grok]]></category>
		<category><![CDATA[InfluxDB]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[KenThompson]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Ocaml]]></category>
		<category><![CDATA[pingora]]></category>
		<category><![CDATA[rfc]]></category>
		<category><![CDATA[RobertGriesemer]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Rustacean]]></category>
		<category><![CDATA[Stackoverflow]]></category>
		<category><![CDATA[StephenKlabnik]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[unsafe]]></category>
		<category><![CDATA[WebAssembly]]></category>
		<category><![CDATA[xAI]]></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=4138</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust 要说这两年后端编程语言谁最火，Rust说自己第二，没人敢说第一。Rust连续8年霸榜stackoverflow最受推崇的编程语言，甚至被推特之父Jack Dorsey称为“完美的编程语言”： 注：最火：仅代表人气最旺，最受欢迎，但并不代表使用者最多。 如果你经常读我的博客，你可能会问：“你不是Go语言布道师吗？怎么也要转Rust了？”其实不然，学习Rust不是要蹭热度，而是实际开发的需要。这些年在汽车行业这个赛道上，云端和车端都要兼顾。目前车端基础软件的开发语言主要是C/C++，但内存安全、性能不输C且高可靠的Rust日益受到车载软件开发的青睐，AUTOSAR组织在2022年成立了Rust工作组就是一个重要的信号。并且据我所知，一些国内造车新势力已经或正在将一些Rust开发的中间件或应用放到了量产车或即将量产的车上。 注：AUTOSAR (Automotive Open System Architecture) 是一个面向汽车电子系统的开放式软件架构标准，由汽车制造商、零部件供应商和电子供应商共同发起并持续维护的一个全球性标准化组织。 不过，Rust语言在某些领域的崛起确实引发了其他编程语言社区的一些不满和争议。特别是Rust社区的一些人提出“Rewrite Everything in Rust”的观点，让很多编程语言社区，尤其是C++社区十分不安。Go社区则相对更加开放和友好的，主流观点是Go与Rust是可以互补的，两种语言在各自的优势领域发挥作用，通过合作而非对抗的方式，能为开发者提供更好的选择。更多细节，可以参考几年前我曾翻译过的前Go团队产品经理、gohugo的作者Steve Francia联合创作的一篇文章《Rust vs. Go：为什么强强联合会更好》。 也就是说Go依然是我的主力语言，但考虑工作上的需要，我要系统学学Rust了。为了避免“从入门到放弃”，我打算采用边学习边输出的方式，一方面可以督促自己学习，另一方面也希望能和读者及时互动，纠正学习中的错误理解。 我的Go语言第一课专栏广受欢迎，其知识结构想必也是大家认可的，这里我就仿照其形式，写一下学习Rust的第一课这个入门系列。 正如我在Go语言第一课专栏所说的那样：我一直认为，当你开始接触一门新语言的时候，你一定要去了解它的历史和现状。因为这样，你才能建立起对这门语言的整体认知，了解它未来的走向。而且，也能建立起学习的“安全感”，即相信它能够给你带来足够的价值和收益，更加坚定地学习下去。 在这篇文章中，我就先来了解一下Rust的诞生历史和现状发展，以及它独特的设计哲学。并与Go语言做个简单对比，希望能够让自己和读者对Rust有一个初步的认识。 1.1 Rust的历史与现状 1.1.1 Rust的诞生与演进 Rust诞生于2006年，这比Google三巨头“密谋”创建Go语言还要早上一年。不过和Go的三位创始人：图灵奖获得者、C语法联合发明人、Unix之父肯·汤普森（Ken Thompson），Plan 9操作系统领导者、UTF-8编码的最初设计者罗伯·派克（Rob Pike），以及Java的HotSpot虚拟机和Chrome浏览器的JavaScript V8引擎的设计者之一罗伯特·格瑞史莫（Robert Griesemer）相比，Rust之父格雷登·霍尔（Graydon Hoare）的身份和江湖地位却没有那么“显赫”。彼时的他只是Mozilla Research的一位加拿大籍的、不到30岁的开发人员： 注：Graydon Hoare这个人非常低调，极少在公开场合露面，因此在网络上很难找到他的肖像，上面图中的肖像来自https://www.crunchbase.com/person/graydon-hoare，我这里甚至不能保证这个肖像就是Hoare本人的。 新生代编程语言的诞生都伴随着一段轶事，比如Go语言的创始人们在Google内部经常遇到C++项目漫长的编译时间问题，每当他们启动一个C++项目的编译，都要等很长时间，期间都能喝上几杯咖啡。这让他们深有感触并意识到需要设计一门编译速度更快的新语言，于是Go语言就这样诞生了。和Go语言“喝咖啡，等C++项目编译”类似，Rust的诞生也有一段轶事： 2006年，29岁的Hoare有一天回到温哥华的家中，但他发现电梯坏了，电梯软件崩溃了！他不得不爬楼梯回到位于21层的家中。当他爬上楼梯时，他感到很恼火。他想：“我们做计算机编程的人居然无法制造出一部可以正常工作而不崩溃的电梯！” Hoare知道，许多此类崩溃都是由于程序使用内存的问题造成的。电梯等设备内部的软件通常是用C++或C语言编写的，这些语言以允许程序员编写运行速度非常快且相当紧凑的代码而闻名。问题是这些语言也很容易意外引入内存错误，这些错误会导致崩溃。Hoare决定对此做点什么。于是他打开笔记本电脑，开始设计一种新的计算机语言，他希望这种语言能够编写小而快速的代码，而不会出现内存错误，他将其命名为Rust。 这段轶事显然不可考证了。但可以确定的是从2006年开始的若干年里，Hoare创建的个人语言项目Rust并没有真正的用于改善电梯系统的程序，而是在得到了Mozilla的赞助下，用在了持续开发Mozilla的浏览器引擎Servo上了，Mozilla在2010年官宣了该项目，Hoare在2010年的一次演讲中也第一次介绍了Rust语言： Rust开源的第一行代码也是在2010年完成的： 此外，最初的Rust编译器是由OCaml实现的，2011年Rust团队使用Rust基于LLVM重新实现了编译器并实现了自举。同年，Rust也有了自己的LOGO，其设计灵感来自于自行车齿盘： 2012年，Graydon Hoare接受InfoQ专访，谈及他带领Rust team在Mozilla开发的系统编程语言Rust，包括Rust的特性、Rust相对于C/C++/Java/Go的优势与不同以及Rust的1.0版本发布计划。 但是，就在下一年，即2013年，Graydon Hoare就因为精力耗尽而辞去了Rust team的领导职务，离开了自己的Rust team，并从此远离了Rust开发。Hoare的离开对Rust team和语言本身来说是一次重大的损失，但Rust社区和团队采取了积极的措施来确保Rust的持续发展和演进。 2014年11月，Rust官宣了cargo和crates.io，前者是Rust项目构建管理器，后者则是Rust官方维护的Rust代码的中央包存储库，通过cargo可以轻松构建和发布包到crates.io，或从crates.io上拉取Rust代码的依赖。 2015年5月15日，Rust迎来了一个里程碑的时刻：Rust 1.0正式发布！ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust">本文永久链接</a> &#8211; https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust</p>
<p>要说这两年后端编程语言谁最火，<a href="https://www.rust-lang.org">Rust</a>说自己第二，没人敢说第一。<a href="https://survey.stackoverflow.co/2023/#section-admired-and-desired-programming-scripting-and-markup-languages">Rust连续8年霸榜stackoverflow最受推崇的编程语言</a>，甚至被推特之父Jack Dorsey称为“完美的编程语言”：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-2.png" alt="" /></p>
<blockquote>
<p>注：最火：仅代表人气最旺，最受欢迎，但并不代表使用者最多。</p>
</blockquote>
<p>如果你经常读我的博客，你可能会问：“你不是Go语言布道师吗？怎么也要转Rust了？”其实不然，<strong>学习Rust不是要蹭热度，而是实际开发的需要</strong>。这些年在汽车行业这个赛道上，云端和车端都要兼顾。目前车端基础软件的开发语言主要是C/C++，但内存安全、性能不输C且高可靠的Rust日益受到车载软件开发的青睐，AUTOSAR组织在2022年成立了Rust工作组就是一个重要的信号。并且据我所知，一些国内造车新势力已经或正在将一些Rust开发的中间件或应用放到了量产车或即将量产的车上。</p>
<blockquote>
<p>注：<a href="https://autosar.org/">AUTOSAR (Automotive Open System Architecture)</a> 是一个面向汽车电子系统的开放式软件架构标准，由汽车制造商、零部件供应商和电子供应商共同发起并持续维护的一个全球性标准化组织。</p>
</blockquote>
<p>不过，Rust语言在某些领域的崛起确实引发了其他编程语言社区的一些不满和争议。特别是Rust社区的一些人提出“Rewrite Everything in Rust”的观点，让很多编程语言社区，尤其是C++社区十分不安。Go社区则相对更加开放和友好的，主流观点是Go与Rust是可以互补的，两种语言在各自的优势领域发挥作用，通过合作而非对抗的方式，能为开发者提供更好的选择。更多细节，可以参考几年前我曾翻译过的前Go团队产品经理、gohugo的作者Steve Francia联合创作的一篇文章《<a href="https://tonybai.com/2021/03/15/rust-vs-go-why-they-are-better-together">Rust vs. Go：为什么强强联合会更好</a>》。</p>
<p>也就是说Go依然是我的主力语言，但考虑工作上的需要，我要系统学学Rust了。为了避免“从入门到放弃”，我打算采用边学习边输出的方式，一方面可以督促自己学习，另一方面也希望能和读者及时互动，纠正学习中的错误理解。</p>
<p>我的<a href="http://gk.link/a/10AVZ">Go语言第一课专栏</a>广受欢迎，其知识结构想必也是大家认可的，这里我就仿照其形式，写一下学习Rust的第一课这个入门系列。</p>
<p>正如我在<a href="http://gk.link/a/10AVZ">Go语言第一课专栏</a>所说的那样：我一直认为，当你开始接触一门新语言的时候，你一定要去了解它的历史和现状。因为这样，你才能建立起对这门语言的整体认知，了解它未来的走向。而且，也能建立起学习的“安全感”，即相信它能够给你带来足够的价值和收益，更加坚定地学习下去。</p>
<p>在这篇文章中，我就先来了解一下Rust的诞生历史和现状发展，以及它独特的设计哲学。并与Go语言做个简单对比，希望能够让自己和读者对Rust有一个初步的认识。</p>
<h2>1.1 Rust的历史与现状</h2>
<h3>1.1.1 Rust的诞生与演进</h3>
<p>Rust诞生于2006年，这比Google三巨头“密谋”创建Go语言还要早上一年。不过和Go的三位创始人：图灵奖获得者、C语法联合发明人、Unix之父肯·汤普森（Ken Thompson），Plan 9操作系统领导者、UTF-8编码的最初设计者罗伯·派克（Rob Pike），以及Java的HotSpot虚拟机和Chrome浏览器的JavaScript V8引擎的设计者之一罗伯特·格瑞史莫（Robert Griesemer）相比，Rust之父<a href="https://graydon2.dreamwidth.org">格雷登·霍尔（Graydon Hoare）</a>的身份和江湖地位却没有那么“显赫”。彼时的他只是Mozilla Research的一位加拿大籍的、不到30岁的开发人员：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-3.png" alt="" /></p>
<blockquote>
<p>注：Graydon Hoare这个人非常低调，极少在公开场合露面，因此在网络上很难找到他的肖像，上面图中的肖像来自https://www.crunchbase.com/person/graydon-hoare，我这里甚至不能保证这个肖像就是Hoare本人的。</p>
</blockquote>
<p>新生代编程语言的诞生都伴随着一段轶事，比如Go语言的创始人们在Google内部经常遇到C++项目漫长的编译时间问题，每当他们启动一个C++项目的编译，都要等很长时间，期间都能喝上几杯咖啡。这让他们深有感触并意识到需要设计一门编译速度更快的新语言，于是Go语言就这样诞生了。和Go语言“喝咖啡，等C++项目编译”类似，Rust的诞生也有一段轶事：</p>
<p>2006年，29岁的Hoare有一天回到温哥华的家中，但他发现电梯坏了，电梯软件崩溃了！他不得不爬楼梯回到位于21层的家中。当他爬上楼梯时，他感到很恼火。他想：“我们做计算机编程的人居然无法制造出一部可以正常工作而不崩溃的电梯！” Hoare知道，许多此类崩溃都是由于程序使用内存的问题造成的。电梯等设备内部的软件通常是用C++或C语言编写的，这些语言以允许程序员编写运行速度非常快且相当紧凑的代码而闻名。问题是这些语言也很容易意外引入内存错误，这些错误会导致崩溃。Hoare决定对此做点什么。于是他打开笔记本电脑，开始设计一种新的计算机语言，他希望这种语言能够编写小而快速的代码，而不会出现内存错误，他将其命名为<strong>Rust</strong>。</p>
<p>这段轶事显然不可考证了。但可以确定的是从2006年开始的若干年里，Hoare创建的个人语言项目Rust并没有真正的用于改善电梯系统的程序，而是在得到了Mozilla的赞助下，用在了持续开发Mozilla的浏览器引擎Servo上了，Mozilla在2010年官宣了该项目，<a href="http://venge.net/graydon/talks/intro-talk-2.pdf">Hoare在2010年的一次演讲</a>中也第一次介绍了Rust语言：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-4.png" alt="" /></p>
<p>Rust开源的第一行代码也是在2010年完成的：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-6.png" alt="" /></p>
<p>此外，最初的Rust编译器是由OCaml实现的，2011年Rust团队使用Rust基于LLVM重新实现了编译器并实现了自举。同年，Rust也有了自己的LOGO，其<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=680521">设计灵感来自于自行车齿盘</a>：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-5.png" alt="" /></p>
<p>2012年，<a href="https://www.infoq.com/news/2012/08/Interview-Rust/">Graydon Hoare接受InfoQ专访</a>，谈及他带领Rust team在Mozilla开发的系统编程语言Rust，包括Rust的特性、Rust相对于C/C++/Java/Go的优势与不同以及Rust的1.0版本发布计划。</p>
<p>但是，就在下一年，即2013年，<a href="https://wikitia.com/wiki/Graydon_Hoare">Graydon Hoare就因为精力耗尽而辞去了Rust team的领导职务</a>，离开了自己的Rust team，并从此远离了Rust开发。Hoare的离开对Rust team和语言本身来说是一次重大的损失，但Rust社区和团队采取了积极的措施来确保Rust的持续发展和演进。</p>
<p>2014年11月，<a href="https://blog.rust-lang.org/2014/11/20/Cargo.html">Rust官宣了cargo和crates.io</a>，前者是Rust项目构建管理器，后者则是Rust官方维护的Rust代码的中央包存储库，通过cargo可以轻松构建和发布包到crates.io，或从crates.io上拉取Rust代码的依赖。</p>
<p>2015年5月15日，Rust迎来了一个里程碑的时刻：<a href="https://blog.rust-lang.org/2015/05/15/Rust-1.0.html">Rust 1.0正式发布！</a> ，这要比<a href="https://go.dev/blog/go1">Go发布1.0版本</a>迟了3年。但正如官博所说：“1.0版本的发布标志着混乱的结束。此版本是我们对稳定性承诺的正式开始，因此它为构建应用程序和库提供了坚实的基础。从现在开始，重大更改基本上超出了范围（一些小的警告适用，例如编译器错误）”。</p>
<p>Rust 1.0发布后，Rust的版本发布周期与节奏也得以确定下来，即<a href="https://blog.rust-lang.org/2014/10/30/Stability.html">每6周发布一个稳定版本</a>，按照这个节奏，与Rust 1.0同时发布的还有Rust 1.1 Beta版本。经过六周的测试后，Rust 1.1 Beta转为Rust 1.1稳定版本，同时发布Rust 1.2 Beta版本，依次类推。当然，Rust还有一个nightly build版本，这个版本包含了最新但不稳定的特性。和Go社区和开发人员每年只能high两次相比，Rust开发者和社区更加幸运，每六周就能high一次！</p>
<p>Rust的演进是<a href="https://github.com/rust-lang/rfcs">基于RFC（Request For Comments）驱动的</a>，并且这一措施是<a href="https://github.com/rust-lang/rfcs/blob/master/text/0002-rfc-process.md">早于Rust 1.0发布前就基于RFC确定下来的</a>。这与<a href="https://github.com/golang/proposal">Go的Proposal process</a>类似，但感觉比Go的流程更规范和严谨，当然这与两种语言的治理结构的组成和规则有关。</p>
<p>然而，Rust 1.0的发布只是Rust语言发展的一个新起点，这件事并没有像<a href="https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html">Go语言在2009年宣布开源</a>那样获得足够的曝光度并赢得TIOBE年度最佳编程语言的称号。</p>
<p>Rust之后的发展依旧是一波三折，这主要也是缘于Rust当时没有一个“<a href="https://tonybai.com/2012/10/08/the-new-age-of-programming-language/">好爹</a>”：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-7.png" alt="" /><br />
<center>TIOBE Rust曲线(2012~2024.3)</center></p>
<p>2020年，Rust语言迎来了自己诞生以来的至暗时刻。因新冠疫情全球流行导致的业绩下滑，2020年8月，Mozilla解雇了全球1000名员工中的250名，这其中就包含Servo引擎背后的团队。该事件引起了人们对Rust未来的担忧，因为团队的一些成员是Rust的主要贡献者。</p>
<p>但塞翁失马焉知非福，2021年2月8日，由五家创始公司（AWS、华为、谷歌、微软和Mozilla）共同赞助的独立非营利组织<a href="https://foundation.rust-lang.org/news/2021-02-08-hello-world/">Rust基金会宣布成立</a>！Rust团队终于有了新家，并且这次除了亲爹Mozilla外，还有四个财大气粗、执IT牛耳的干爹，Rust语言的未来一下变得光明了。</p>
<p>实际上Rust的发展也是如此，从2021年基金会成立至今(2024.4)，Rust取得了长足的发展：语言特性不断增强，编译器性能持续优化，生态系统日渐壮大和完善，增加和完善了对WebAssembly、嵌入式、大数据、区块链、人工智能等领域的支持。下面我们就来说说Rust语言的现状。</p>
<h3>1.1.2 Rust的现状发展</h3>
<h4>1.1.2.1 语言排名</h4>
<p>虽然Rust热度很高，但在语言排名方面与几乎同期的Go还有一定差距，在2024.3月的TIOBE排名中，Go稳居第8位，而Rust虽然刷新了自己的历史最高排名，但也仅仅排在第17位：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-8.png" alt="" /><br />
<center>TIOBE Rust 2024.3排名</center></p>
<p>在<a href="https://redmonk.com/sogrady/2024/03/08/language-rankings-1-24/">Redmonk 2024.1月排名</a>中，Rust位列19位，Go位列12位：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-9.png" alt="" /><br />
<center>Redmonk Rust 2024.1排名</center></p>
<p>不过，Rust的热度和社区活跃度甚至要高于Go，究其根源，我认为还是与两个开源语言的治理结构有关，下面是Go和Rust在Reddit论坛上的拥趸数量与在线人数对比（2024.4.6 21:39北京时间）：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-10.png" alt="" /></p>
<p>如果能持续保持住这样的热度和发展势头，Rust可能在未来几年迅速接近Go的位置，甚至超越也是有很大可能的。</p>
<p>和Go开发人员自称Gopher类似，Rust开发人员自称<strong>Rustacean</strong>，这是一个结合了“Rust”和“Crustacean”（甲壳类）两个词语的组合词。此外，Rust社区还设计了Rust的非官方吉祥物(mascot)：<a href="https://www.rustacean.net/">Ferris</a>，一只可爱的红色螃蟹，它是由设计师Karen Rustad Tölva在2010年创作的。Ferris象征着Rust语言的安全性、并发性和生产力，同时也代表着Rust社区的活跃和友好。</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-14.png" alt="" /></p>
<p>crates.io上还有一个名为<a href="https://crates.io/crates/ferris-says">ferris-says</a>的crate，可以用来打印Ferris吉祥物相关的文字，可以输出像下面这样的ASCII字符拼接出的Ferris形象：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-15.png" alt="" /></p>
<h4>1.1.2.2 语言采纳</h4>
<p>从上面TIOBE的Rust排名曲线来看，Rust在2018 edition和2021 edition前后到达过两个“尖峰”。各大公司以及初创也基本都是在2018 edition之后开始逐渐采纳Rust的。</p>
<blockquote>
<p>注：<a href="https://doc.rust-lang.org/edition-guide/editions/">关于Rust edition，感兴趣的读者可以先参考Rust官方文档</a>，在后续学习cargo和Rust项目编译构建的时候，我们还会深入学习和理解edition。</p>
</blockquote>
<p>接下来，我们列举一下Rust基金会创始公司以及其他一些知名IT公司和组织对Rust的采纳情况。</p>
<ul>
<li>AWS</li>
</ul>
<p>除了成为Rust基金会创始成员，让大家真正知道了AWS对Rust投入的决心外，真正让大家看到AWS内部大量使用Rust的文章是2022年2月AWS在官博发表的一篇名为<a href="https://aws.amazon.com/cn/blogs/opensource/sustainability-with-rust/">Sustainability with Rust</a>的文章，这篇文章介绍了Rust在AWS内部基础设施构建上发挥的关键作用，包括用Rust进行Firecracker、AWS Lambda、Amazon S3、 Bottlerocket等开发。这篇文章还引用了一篇2017年发表的论文<a href="https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf">Energy Efficiency across Programming Languages</a>中的结论，认为Rust在能耗方面的优势是其他语言如Go、Java不能匹敌的，这一定程度上引发了争议，记得Russ Cox在Twitter上海批驳了这篇文章中引用的数据不准确。</p>
<ul>
<li>华为</li>
</ul>
<p>作为国内以一己之力力抗美帝的通信、IT、手机、汽车等多赛道公司，同样也是拥有处理器、OS、编译器等全技术栈的研发型公司，华为对Rust这一的系统级编程语言尤为青睐。但从公开资料上能看到的东西不多，从<a href="https://trusted-programming.github.io/">华为可信编程实验室</a>的主页上，我们看到了Rust在华为应用的一些情况。</p>
<p>华为的目标是在全球最大的电信行业设计值得信赖的软件系统。华为正在努力将部分代码库迁移到Rust，它比C/C++更安全且性能更高。为了帮助开发人员完成这个过程，华为利用开源<a href="https://github.com/immunant/c2rust">C2Rust翻译器</a>直接从C生成Rust代码。</p>
<p>huawei还在内部用Rust开发了一组丰富的内部库，这些库围绕基于actor的并发范式而构建，这样利用Rust语言功能（例如async、await等）简化了异步编程。</p>
<ul>
<li>Google</li>
</ul>
<p>Google已将Rust应用到Chromium、Android和FuchsiaOS中，其中Chromium对Rust的支持处于实验阶段。开发者可以使用Rust来开发适用于Android和FuchsiaOS的组件，并且Rust在Android和FuchsiaOS的内部代码中使用的比例相当大，特别是FuchsiaOS，Rust代码已经超过50%。由于内部Cpp代码量较大，2022年10月，谷歌推出了基于开源RISC-V芯片的新型安全操作系统KataOS。Sparrow是KataOS的参考实现，运行在seL4上，几乎完全用Rust编写。该操作系统不是为台式电脑或智能手机设计的，而是为物联网设计的，可用于智能家居设备。目标是为嵌入式硬件或边缘设备构建可验证的安全操作系统，例如捕获图像的网络连接摄像头，这些图像在设备上或云中处理以进行机器学习。在2022年发布的Android 13版本中，谷歌还宣布Android版本13中大约21%的新原生代码（C/C++/Rust）是Rust。AOSP拥有约150万行Rust代码，涵盖了新功能和组件。此外，Android的Rust代码中已发现零内存安全漏洞。为了实现提高Android内部安全性、稳定性和质量的目标，Android团队还表示，Rust应该用在代码库中需要原生代码的任何地方。</p>
<ul>
<li>微软</li>
</ul>
<p>Microsoft拥有世界上最大的用C/C++编写的代码集合之一，其所有核心产品（例如Windows、Office和Azure云）均使用该代码。2019年，微软开始探索内存安全的编程语言，并试用了Rust。随后，<a href="https://github.com/microsoft/windows-rs/releases">Rust for Windows Library</a>在GitHub上开源，使Rust开发人员能够顺利使用Windows API。</p>
<p>2022年，微软Azure CTO Mark Russinovich表示，新项目不应再使用C和C++。他建议，Rust应该用于需要非GC语言的项目，以提高安全性和可靠性。</p>
<p>2023年7月，微软宣布<a href="https://blogs.windows.com/windows-insider/2023/07/12/announcing-windows-11-insider-preview-build-25905">在Windows 11 Insider Preview Build 25905版本中发布了Rust参与编写的Windows内核模块</a>。其中包含了一个 GDI 引擎的实现。</p>
<ul>
<li>Meta（前身为Facebook)</li>
</ul>
<p>虽然不是创始成员，但财大气粗的Meta目前已经是唯一非创始成员的铂金赞助商了。Meta历史上以C++为主，但从2021年开始，Rust便开始大量使用Rust了，并成为Meta支持的服务器端语言列表中的最新成员。</p>
<p>Meta在2021和2022年先后发表过<a href="https://engineering.fb.com/2021/04/29/developer-tools/rust/">A brief history of Rust at Facebook</a>和<a href="https://engineering.fb.com/2022/07/27/developer-tools/programming-languages-endorsed-for-server-side-use-at-meta/">Programming languages endorsed for server-side use at Meta</a>详细说明了Rust在Meta内部的应用，感兴趣的读者可以去看看。</p>
<ul>
<li>Linux基金会</li>
</ul>
<p>炒得沸沸扬扬的在Linux Kernel中支持Rust语言终于尘埃落定，<a href="https://www.infoq.com/news/2022/12/linux-6-1-rust/">Linux Kernel 6.1版本对Rust提供了支持</a>。Rust同时进入Windows、Linux内核，这让Rust的江湖地位得到进一步提升。相信未来，Rust在两大操作系统内核中的代码比例会逐步提升的。</p>
<ul>
<li>其他一些公司对Rust的应用</li>
</ul>
<p>2024年初，cloudflare公司开源了其内部替代nginx的Rust库<a href="https://github.com/cloudflare/pingora">pingora</a>，作为业界一家提供互联网基础设施和网络服务的公司，其采用Rust的示范效应也是非常明显的。</p>
<p>influxdb的母公司influxdata在2023年发布了influxdb 3.0版本，该版本采用Rust全面重写。不光是influxdb，诸多新兴时序数据库都采用了Rust技术栈(+<a href="https://tonybai.com/2023/06/25/a-guide-of-using-apache-arrow-for-gopher-part1">Arrow</a>+<a href="https://tonybai.com/2023/07/31/a-guide-of-using-apache-arrow-for-gopher-part6/">Parquet</a>+DataFusion)，比如greptimedb、cnosdb、CeresDB等。</p>
<p>字节跳动内部服务大量使用Go，但这几年也有一些Rust爱好者在字节内部布道Rust，并开源了诸如Rust RPC框架<a href="https://github.com/cloudwego/volo">volo</a>、基于io-uring的Rust async runtime <a href="https://github.com/bytedance/monoio">monoio</a>等。</p>
<p>埃隆马斯克的xAI在2024年发布的<a href="https://github.com/xai-org/grok-1">grok-1大模型</a>中，Rust开发的<a href="https://github.com/xai-org/qdrant">Qdrant向量数据库</a>也发挥了重要作用，也是Rust在AI领域应用迈出的重要一步。</p>
<h4>1.1.2.3 应用领域</h4>
<p>在Rust官网，我们能看到官方列出的Rust应用的四大领域：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-16.png" alt="" /></p>
<p>在这四个领域中，Rust都有非常活跃的发展和应用，每个领域都有大量的优秀开源项目，这里无法穷尽，大家可以参考与<a href="https://awesome-go.com/">awesome-go</a>类似的<a href="https://github.com/rust-unofficial/awesome-rust">awesome-rust项目</a>查看自己关于领域的开源项目。</p>
<h4>1.1.2.4 工作机会与薪酬</h4>
<p>从<a href="https://www.devjobsscanner.com/blog/top-8-most-demanded-programming-languages/">devjobsscanner统计的2023年的各个编程语言的工作需求</a>来看，Rust目前依旧比较小众！</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-11.png" alt="" /></p>
<p>从<a href="https://survey.stackoverflow.co/2023/#technology-top-paying-technologies">stackoverflow 2023薪酬统计</a>来看，Rust薪资位于中游：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-12.png" alt="" /></p>
<p>另外<a href="https://4dayweek.io/salary/highest-paying-programming-languages">4 day week的工作数量和薪酬分析</a>也印证了上面两点：Rust小众(工作数量相对较少)，薪酬位于中游：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-13.png" alt="" /></p>
<p>国内Rust的工作数量与国际相同，都处于较少的位置，但国内Rust薪酬数据可能并不低，因为这些Rust岗位基本都在一线大厂，或是拿了较多融资的初创，待遇可能都比较不错。</p>
<p>了解了Rust的诞生和演化历史以及Rust的不错的现状后，我们再来看看Rust的设计哲学。</p>
<h2>1.2 Rust的设计哲学</h2>
<p><strong>设计哲学之于编程语言，就好比一个人的价值观之于这个人的行为</strong>。因为如果你不认同一个人的价值观，那你其实很难与之持续交往下去，即所谓道不同不相为谋。类似的，如果你不认同一门编程语言的设计哲学，那么大概率你在后续的语言学习中，就会遇到上面提到的这些问题，而且可能会让你失去继续学习的精神动力。因此，在真正开始学习Rust语法和编码之前，我们还需要先来了解一下Rust的设计哲学，等了解完这些之后，你就能更深刻地认识到自己学习Rust的原因了。</p>
<h3>1.2.1 Rust核心价值观</h3>
<p>2019年6月，Rust核心组成员Stephen Klabnik在QCon London发表了一次名为<a href="https://www.infoq.com/presentations/rust-tradeoffs/">How Rust Views Tradeoffs</a>的演讲，在这次演讲中，他阐述了他个人理解的Rust的核心价值观，<strong>这些价值观是Rust team在做设计取舍时拒绝妥协的点</strong>，它们包括内存安全、执行速度和生产力：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-17.png" alt="" /></p>
<p>按照Stephen Klabnik的说法，这三个核心价值观也是有序的，首先是内存安全，这是Rust最为在乎的立身之本，其次是高性能，最后是生产力。当它们之间出现冲突时，按最高价值观决策！</p>
<p>这其实与Rust官方对Rust的介绍也是一样的：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-19.png" alt="" /></p>
<p>官方的Reliable对应的就是内存安全（memory safety)，而efficient则有两层含义，一是运行时的高效，另外一个方面则是构建时的生产力也要保持高水准。</p>
<p>这三个价值观是Rust语言的设计目标，也是Rust语言的特色和优势所在。在失去了Graydon Hoare这个语言之父后，这些价值观也成为了Rust核心团队在判定语言演进方向的根本依据。</p>
<ol>
<li>内存安全</li>
</ol>
<p>内存安全是<strong>Rust最重要的价值观</strong>，它意味着Rust程序在运行时不会出现内存泄漏(不使用unsafe代码的前提下)、缓冲区溢出、野指针等内存相关的错误。这些错误不仅会导致程序崩溃，还可能导致安全漏洞的产生。Rust通过所有权（ownership）、生命周期（lifetime）和借用（borrowing）等特性，在编译时最大程度地检查出这些错误，从而保证程序的内存安全。</p>
<p>Rust的内存安全机制不仅能够提高程序的稳定性和可靠性，还能够降低开发和维护的难度。由于Rust能够在编译时就检查出内存错误，开发者就不必再花费大量时间和精力去寻找和修复这些错误了。</p>
<ol>
<li>高性能</li>
</ol>
<p>高性能是Rust的仅次于内存安全的一个核心价值观，Rust语言的设计目标之一就是要成为一种高性能的系统编程语言。Rust通过零成本抽象、移动语义、泛型编程等特性，使得程序能够在运行时达到与C、C++等传统系统编程语言相当的性能。</p>
<p>Rust的高性能机制不仅能够提高程序的运行速度，还能够降低硬件成本。由于Rust能够更好地利用硬件资源，因此在相同的硬件条件和资源开销下，Rust程序的性能通常比其他语言的程序更高。</p>
<ol>
<li>生产力</li>
</ol>
<p>生产力是Rust的第三个核心价值观，Rust语言的设计目标之一就是要成为一种能够提高开发者生产力的语言。Rust通过包管理器Cargo、智能编辑器支持、丰富的库生态、详实系统的文档等特性，使得开发者能够更轻松地编写、调试和维护Rust程序。</p>
<h3>1.2.2 Rust的次要价值观</h3>
<p>Stephen Klabnik还总结了三条Rust的次要价值观(secondary values)：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-18.png" alt="" /></p>
<p>我们看到：Rust的次要价值观包括ergonomics、compile times和correctness，这三个价值观也是Rust语言的设计目标之一，但和上面的第一级核心价值观相比，它们是可以被妥协掉的。</p>
<p>Ergonomics是指Rust语言的易用性，它是Rust语言的一个重要设计目标。Rust希望通过简单易用的语法和丰富的库生态，使得开发者能够更轻松地编写Rust程序。</p>
<p>Compile Times是指Rust编译器的编译时间。Rust编译器很慢，这是一个问题，Rust team也正在努力优化，但Rust team更关心二进制文件的最终执行速度，而不是让编译器变得更快，这就是Compile Time作为次要价值观的原因。</p>
<p>Correctness是指Rust语言的正确性，Rust真的很在乎你的程序是否正确，Rust希望通过强大的类型系统和静态检查，来尽可能地保证Rust程序的正确性。但Rust不愿意使用完全依赖类型以及证明助手来证明你的代码是正确的。</p>
<h3>1.2.3 与Go的价值观的对比</h3>
<p>我们来对比一下Go官方的对Go的介绍，看一下其隐含的Go价值观(设计哲学)：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-rust-first-lesson-all-about-rust-20.png" alt="" /></p>
<p>在官方对Go的介绍中有三个关键词：Simple、Secure和Scalable。</p>
<p>Simple是Go语言的首要设计原则，Go语言的设计者希望Go语言能够简单易用，使得开发者能够更快地学习和使用Go语言，以快速形成生产能力。Go语言的语法简单易懂，并且去掉了许多其他编程语言中复杂的特性，如类型层次与继承等，使得Go语言更加简洁易学、易读、易用和易维护。</p>
<p>至于Secure，Go语言的设计者希望Go语言能够更加安全可靠，避免许多其他编程语言中常见的安全漏洞。Go语言通过垃圾回收机制来自动管理内存，避免了许多其他编程语言中常见的内存泄漏和缓冲区溢出等问题。同时，Go语言提供了轻量级的goroutine和通道机制，使得开发者能够更加方便地实现并发编程，并且通过数据竞争检测工具，避免了并发编程中常见的数据竞争问题。同时Go语言提供了简单易用的显式错误处理机制，让开发者不遗漏任一处错误处理。</p>
<p>Scalable则体现在Go面向工程、原生内置并发以及崇尚组合的设计哲学上了。 Go语言的设计者希望Go语言能够更好地支持可扩展性，使得Go程序能够更好地适应不同的组织规模、不同的工作负载和硬件环境。Go语言通过简单的语法、基于module的可重现的构建管理、极高的编译速度、高质量的标准库、实用的工具链、强大的内置并发机制以及面向接口编程等特性，使得Go程序更加可扩展，生产力更为高效。</p>
<p>总的来说，Rust更注重安全、底层控制和极致性能，而Go则更加关注简单、安全、扩展性与工程效率。两者在定位和设计哲学上存在区别，但也有一些共同特点，比如都拥有现代的工具链、活跃的社区等。</p>
<h2>1.3 本章小结</h2>
<p>在这篇博文中，我们了解了Rust语言的诞生历程、现状发展，以及它独特的设计哲学。通过与Go语言进行对比，我们可以看出两者在出身、目标和设计理念上的一些差异。</p>
<p>随着软件系统的复杂度不断提高，对安全性、性能和并发的需求也越来越高。作为一门专注于底层系统编程、性能极致化的新语言，Rust正在吸引越来越多开发者的关注。相信通过后面对Rust的全方面的系统学习，我和大家都能够更深入地理解和掌握Rust。</p>
<p>如果你认为Rust的价值观与你的十分匹配，你也认同Rust未来的发展。那就期待下一篇吧，在下一篇中，我们将开始动手学习Rust了!</p>
<h2>1.4 参考资料</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Rust_(programming_language)">Rust维基百科</a> &#8211; https://en.wikipedia.org/wiki/Rust_(programming_language)</li>
<li><a href="https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/">How Rust went from a side project to the world’s most-loved programming language</a> &#8211; https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/</li>
<li><a href="https://rustmagazine.org/issue-1/2022-review-the-adoption-of-rust-in-business/">2022 Review | The adoption of Rust in Business</a> &#8211; https://rustmagazine.org/issue-1/2022-review-the-adoption-of-rust-in-business/</li>
<li><a href="https://www.infoq.com/presentations/rust-tradeoffs/">How Rust Views Tradeoffs</a> &#8211; https://www.infoq.com/presentations/rust-tradeoffs/</li>
<li><a href="https://rustacean.net">非官方Rust吉祥物Ferris</a> &#8211; https://rustacean.net</li>
</ul>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2024, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
