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

<channel>
	<title>Tony Bai &#187; 小结</title>
	<atom:link href="http://tonybai.com/tag/%e5%b0%8f%e7%bb%93/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Mon, 08 Jun 2026 23:32:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Go 语言的灵魂之问：当“简单”变得“复杂”</title>
		<link>https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex/</link>
		<comments>https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex/#comments</comments>
		<pubDate>Tue, 16 Sep 2025 00:27:51 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[功能]]></category>
		<category><![CDATA[动态平衡]]></category>
		<category><![CDATA[原则]]></category>
		<category><![CDATA[变化]]></category>
		<category><![CDATA[向后兼容]]></category>
		<category><![CDATA[哲学]]></category>
		<category><![CDATA[复杂]]></category>
		<category><![CDATA[复杂性]]></category>
		<category><![CDATA[小结]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[开发者]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[演进]]></category>
		<category><![CDATA[生命力]]></category>
		<category><![CDATA[生态]]></category>
		<category><![CDATA[社区]]></category>
		<category><![CDATA[稳定性]]></category>
		<category><![CDATA[简单]]></category>
		<category><![CDATA[简约]]></category>
		<category><![CDATA[认知过载]]></category>
		<category><![CDATA[讨论]]></category>
		<category><![CDATA[语言特性]]></category>
		<category><![CDATA[负担]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5168</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex 大家好，我是Tony Bai。 “我没有时间写一封短信，所以我写了一封长信。” —— 马克·吐温 这句名言的字面意思是写长信很容易，但把长信写成短信，就要删掉很多，这个过程是很难的。 在Go社区近期的一场热议中，该名言被引用来概括讨论的核心议题：简单是复杂的，而把事情搞复杂，反而简单。 这场讨论始于一个 Gopher 的真诚提问：在重温了 Rob Pike 2015 年关于“Simplicity is Complicated”的著名演讲后，他感到困惑。Go 语言在近些年增加了不少新特性，尤其是泛型，这是否违背了当初的简约哲学？语言真的因此变得更好了吗？ 这个问题，如同投入平静湖面的一颗石子，激起了层层涟漪。它既是对 Go 语言演进方向的拷问，更是对“简单”这一核心价值观的再审视。 但要厘清这场复杂的辩论，我们不能简单地给出“是”或“否”的答案。相反，通过挖掘和解读社区的集体智慧，我们可以发现，Go 语言的演进其实遵循着三条深刻的内在法则。 本文将为大家曾现这三大法则，以期揭示 Go 语言在保持其灵魂的同时，如何拥抱变化。 法则一：演进，是语言保持生命力的唯一途径 在讨论中，一个压倒性的共识是：语言必须演进以保持其生命力。 这也和2023年末Go前任技术负责人Russ Cox演讲中的观点不谋而合。 一位资深开发者引用了 Pascal 的例子：一门曾经辉煌的语言，因其未能跟上时代的需求而逐渐式微。与之相对，C 语言虽然演进缓慢，但其核心结构的简单性使其成为构建其他语言（如 C++）的基石，从而获得了永生。 Go 团队显然深谙此道。无论是备受争议的 go.mod 还是千呼万唤始出来的泛型，社区普遍认为，这些都不是轻率的“功能堆砌” (feature creep)，而是 Go 团队在经过漫长、缓慢且深思熟虑的辩论后，对真实世界需求的审慎回应。 “不演进的语言，将面临失去其存在意义的风险。” 这种演进并非盲目追逐潮流，而是为了解决社区在实践中遇到的真实痛点。Go 的选择，不是停滞不前，而是以自己独有的、极其克制的节奏向前迈进。 法则二：复杂性守恒——从“脑海”到“工具”的迁移 “复杂性永远不会消失，它只是在迁移。” 一位来自 Perl 世界的开发者分享了这一深刻洞见。 在 Go [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/go-language-when-simple-becomes-complex-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex">本文永久链接</a> &#8211; https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex</p>
<p>大家好，我是Tony Bai。</p>
<blockquote>
<p>“我没有时间写一封短信，所以我写了一封长信。” —— 马克·吐温</p>
</blockquote>
<p>这句名言的字面意思是写长信很容易，但把长信写成短信，就要删掉很多，这个过程是很难的。</p>
<p>在Go社区<a href="https://www.reddit.com/r/golang/comments/1nfhi7s/simplicity_is_complicated/">近期的一场热议</a>中，该名言被引用来概括讨论的核心议题：<strong>简单是复杂的，而把事情搞复杂，反而简单。</strong></p>
<p>这场讨论始于一个 Gopher 的真诚提问：在重温了 Rob Pike 2015 年关于“<a href="https://go.dev/talks/2015/simplicity-is-complicated.slide#1">Simplicity is Complicated</a>”的著名演讲后，他感到困惑。Go 语言在近些年增加了不少新特性，尤其是<a href="https://tonybai.com/2022/04/20/some-changes-in-go-1-18">泛型</a>，这是否违背了当初的<a href="https://tonybai.com/2025/06/12/grog-brain-heaven">简约哲学</a>？语言真的因此变得更好了吗？</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-language-when-simple-becomes-complex-2.png" alt="" /></p>
<p>这个问题，如同投入平静湖面的一颗石子，激起了层层涟漪。它既是对 Go 语言演进方向的拷问，更是对“简单”这一核心价值观的再审视。</p>
<p>但要厘清这场复杂的辩论，我们不能简单地给出“是”或“否”的答案。相反，通过挖掘和解读社区的集体智慧，我们可以发现，Go 语言的演进其实遵循着三条深刻的内在法则。</p>
<p>本文将为大家曾现这三大法则，以期揭示 Go 语言在保持其灵魂的同时，如何拥抱变化。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/go-micro-column-2025-pr.png" alt="" /></p>
<h2>法则一：演进，是语言保持生命力的唯一途径</h2>
<p>在讨论中，一个压倒性的共识是：<strong>语言必须演进以保持其生命力。</strong> 这也和<a href="https://tonybai.com/2023/12/10/go-changes">2023年末Go前任技术负责人Russ Cox演讲中的观点不谋而合</a>。</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-changes-3.png" alt="" /></p>
<p>一位资深开发者引用了 Pascal 的例子：一门曾经辉煌的语言，因其未能跟上时代的需求而逐渐式微。与之相对，C 语言虽然演进缓慢，但其核心结构的简单性使其成为构建其他语言（如 C++）的基石，从而获得了永生。</p>
<p>Go 团队显然深谙此道。无论是备受争议的 go.mod 还是千呼万唤始出来的泛型，社区普遍认为，这些都不是轻率的“功能堆砌” (feature creep)，而是 Go 团队在经过漫长、缓慢且深思熟虑的辩论后，对真实世界需求的审慎回应。</p>
<blockquote>
<p>“不演进的语言，将面临失去其存在意义的风险。”</p>
</blockquote>
<p>这种演进并非盲目追逐潮流，而是为了解决社区在实践中遇到的真实痛点。Go 的选择，不是停滞不前，而是以自己独有的、极其克制的节奏向前迈进。</p>
<h2>法则二：复杂性守恒——从“脑海”到“工具”的迁移</h2>
<p>“复杂性永远不会消失，它只是在迁移。” 一位来自 Perl 世界的开发者分享了这一深刻洞见。</p>
<p>在 Go 的早期，语言的极度简约，意味着许多复杂性被转移到了开发者身上。我们不得不编写大量的 interface{} 代码，或者依赖 go generate 和各种工具来处理本可以由语言特性解决的问题。这符合 Go 早期的理念：“<strong>将更多的负担交给工具，将更少的负担留给开发者的大脑。</strong>”</p>
<p>然而，当新特性（如泛型）被引入时，这种平衡发生了微妙的变化。语言本身承担了更多的复杂性，以期为开发者在特定场景下提供更简洁、更安全更强大的表达方式。</p>
<p>但这把“双刃剑”也引起了社区的警惕：当语言特性变得过于丰富时，复杂性是否会从工具端，重新迁移回开发者的大脑？我们会不会像某些语言的社区那样，因为不同的特性偏好而分裂成不同的“程序员种姓”？</p>
<p>Go 的应对之策是：<strong>在能力与复杂性之间寻求一个极其苛刻的平衡点。</strong></p>
<p>以泛型为例，Go 的实现远非“完全体”。一个被反复提及的限制是<strong>“Go 仍然不支持泛型方法”</strong>。</p>
<pre><code class="go">// 我们可以写一个泛型函数
func GenericFunc[T any](t Thing, arg T) {}

// 但我们不能写一个泛型方法（方法自身拥有独立的类型参数）
// func (t Thing) GenericFunc[T any](arg T) {} // 编译错误！
</code></pre>
<p>这个看似“残缺”的设计，或许恰恰是 Go 简约哲学的体现？它提供了社区最急需的 80% 的泛型能力，同时又刻意避免了因引入更复杂特性（如高级类型理论）而带来的<a href="https://tonybai.com/2024/10/24/cognitive-load-impact-on-programming-language-choice-and-study">认知过载</a>。这是 Go 在演进道路上，小心翼翼守护其“简单”灵魂的明证。</p>
<h2>法则三：稳定性压倒一切——Go 的“向后兼容”承诺</h2>
<p>在讨论语言演进时，<a href="https://tonybai.com/2025/08/30/python-an-origin-story">Python2到Python3 的“大分裂”</a>和 Ruby 小版本更新带来的破坏性变更，被作为反面教材反复提及。这些案例凸显了 Go 最宝贵的资产之一：<strong>坚如磐石的向后兼容性。</strong></p>
<p>一位开发者感慨道：“Go 是少数几种，我可以拿起 10 年前的代码，几乎不做修改就能成功编译并运行的语言。”</p>
<p>这种稳定性，让 Go 开发者可以放心地升级工具链，享受新版本带来的性能提升和安全修复，而无需担心现有代码库会“一夜之间”崩溃。go.mod 的引入，更是将这种稳定性从语言层面扩展到了整个依赖生态。</p>
<p>因此，即使 Go 增加了新特性，其核心体验依然是连贯和可预测的。开发者可以选择性地拥抱新功能，也可以在需要时，继续使用他们熟悉的那套“旧”的、但依然行之有效的方法。</p>
<h2>小结：动态平衡中的简约</h2>
<p>回到最初的问题：Go 还是那个推崇“简单”的语言吗？</p>
<p>社区的答案是：<strong>是，但“简单”的内涵已经演变。</strong></p>
<p>Go 的简约，不再是特性列表的长度，而是一种<strong>动态的平衡</strong>。它是在“停滞不前的风险”与“功能过载的混乱”之间走钢丝；是在“将复杂性留给工具”与“用语言特性赋能开发者”之间做权衡；是在“提供新能力”与“保护向后兼容”之间做取舍。</p>
<p>这场讨论本身，比任何单一的答案都更有价值。它表明 Go 社区拥有一批充满激情、对语言的哲学核心保持高度警惕的开发者。正是这种持续的、健康的“紧张感”，确保了 Go 在未来的演进中，无论增加什么，都不会忘记它最初为何而出发。</p>
<p>简约依然是 Go 的北极星，只是抵达它的航路，变得比以往任何时候都更加深思熟虑。</p>
<hr />
<p><strong>想系统学习Go，构建扎实的知识体系？</strong></p>
<p>我的新书《<a href="https://book.douban.com/subject/37499496/">Go语言第一课</a>》是你的首选。源自2.4万人好评的极客时间专栏，内容全面升级，同步至Go 1.24。首发期有专属五折优惠，不到40元即可入手，扫码即可拥有这本300页的Go语言入门宝典，即刻开启你的Go语言高效学习之旅！</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-primer-published-4.png" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2023年Go语言盘点：稳中求新，稳中求变</title>
		<link>https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language/</link>
		<comments>https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language/#comments</comments>
		<pubDate>Sun, 31 Dec 2023 05:27:21 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[2023]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[arena]]></category>
		<category><![CDATA[Arrow]]></category>
		<category><![CDATA[Camel]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[clear]]></category>
		<category><![CDATA[comparable]]></category>
		<category><![CDATA[coverage]]></category>
		<category><![CDATA[devlake]]></category>
		<category><![CDATA[dubbo]]></category>
		<category><![CDATA[forrange]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Githut]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go.mod]]></category>
		<category><![CDATA[go1.20]]></category>
		<category><![CDATA[go1.21]]></category>
		<category><![CDATA[GODEBUG]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gomodule]]></category>
		<category><![CDATA[gonew]]></category>
		<category><![CDATA[gopherchina]]></category>
		<category><![CDATA[GopherCon]]></category>
		<category><![CDATA[gorilla]]></category>
		<category><![CDATA[govulncheck]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[loopvar]]></category>
		<category><![CDATA[max]]></category>
		<category><![CDATA[min]]></category>
		<category><![CDATA[mux]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[panic]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PGO]]></category>
		<category><![CDATA[PYPL]]></category>
		<category><![CDATA[redmonk]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[RussCox]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[slog]]></category>
		<category><![CDATA[Spectrum]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[Telemetry]]></category>
		<category><![CDATA[Tesla]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[unsafe]]></category>
		<category><![CDATA[v2]]></category>
		<category><![CDATA[wasi]]></category>
		<category><![CDATA[wasm]]></category>
		<category><![CDATA[zap]]></category>
		<category><![CDATA[代码覆盖率]]></category>
		<category><![CDATA[供应链]]></category>
		<category><![CDATA[内存管理]]></category>
		<category><![CDATA[切片]]></category>
		<category><![CDATA[向前兼容]]></category>
		<category><![CDATA[向后兼容]]></category>
		<category><![CDATA[大语言模型]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[小结]]></category>
		<category><![CDATA[工具链]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[数组]]></category>
		<category><![CDATA[标准库]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[漏洞]]></category>
		<category><![CDATA[盘点]]></category>
		<category><![CDATA[类型推断]]></category>
		<category><![CDATA[编程语言排行榜]]></category>
		<category><![CDATA[编译器优化]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[远控]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=4092</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language 时光荏苒，转眼间已经是2023年的最后一天了。《2022年Go语言盘点：泛型落地，无趣很好，稳定为王》仿佛就写在昨天。 回首这一年，全球彻底从新冠大流行中得以复苏，Go语言也不例外，最直观的表现就是全球各地的GopherCon技术大会或小型Meetup都纷纷从停办/线上的状态来到了线下，并获得Gopher们的热烈欢迎和踊跃参与，比如下图中的GopherCon、GopherCon UK、GopherCon Europe、GopherCon Australia、Golab等。 尤其值得一提的是我们本土最大的Gopher技术大会GopherChina 2023，今年为了满足不同地域Gopher的需求，GoCN社区在6月和11月分别在北京和上海举办了两次GopherChina大会，这也是历史首次。 Go语言团队的大神们也开始重新“乐此不疲”地参与到上述这些大会中，以推进全球Go社区与生态的建设。就连已经退居二线的Go语言之父Rob Pike也亲自“现身说法”，在年底的GopherCon Australia 2023上发表了“What We Got Right, What We Got Wrong”的主题演讲来回顾Go诞生以来的得与失。 大神回顾一生，我们盘点一年。在这篇文章中，我就和大家一起聊聊Go在2023年的状态、所处的位置以及Go未来演进的机制与策略。 1. Go的2023 1.1 稳 一如往年，Go在2023年发布了两个大版本，分别是2023年2月份的Go 1.20和8月份的Go 1.21。 在这两个版本中，Go语法特性一如既往的求稳，除了支持切片类型到数组类型(或数组类型的指针)的类型转换，其余更是像语法的修修补补，比如：comparable“放宽”了对泛型实参的限制、unsafe包继续添加“语法糖”、增加min、max和clear预定义函数、增强type inference能力等。 这些并不会让Gopher感到“意外”，因为这与Russ Cox在2022年宣称的“Go is boring”的精神是一脉相承的。 不过，除了Go语法特性变化方面的“寡淡”之外，Go在其他方面还是求新和求变的，接下来我们先来看看Go是如何求新的。 注：求新与求变可能存在交集的地方，边界可能也有一定模糊性，也存在相互促进的情况，希望大家阅读下面内容时不要吹毛求疵:)。 1.2 求新 Go在语法特性求稳的同时，在编译器、工具链、运行时以及标准库等方面都在努力优化和打磨，旨在进一步提升Go兼具的生产力与运行时效率，其中很多优化和打磨的措施不乏新颖。 Go 1.20版本中首次引入的PGO(profile-guided optimization)技术预览版，到Go 1.21版本变为默认开启，Go官方给出的PGO优化的效果数据是：PGO优化带来的性能提升一般是2%~7%，而在最新的Go 1.22rc1中，这个数字已经变为2%~14%了。 在内存管理方面，Go 1.20引入了试验特性arena包，虽然它没能在Go 1.21中按时转正，如今处于proposal-hold状态，但这也算是一次在内存管理机制上的求新。 Go是一门面向软件工程的编程语言，在这一年中，Go在软件工程领域的求新例子也是不少。比如：可用于大幅简化Go项目创建的gonew工具，它支持基于go project template clone并创建一个属于你的Go项目；再比如对应用执行时的代码覆盖率的采集，可以帮助开发者更进一步了解最终可执行程序代码执行路径上的测试覆盖情况；而govulncheck工具则是Go在软件工程与供应链安全领域的求新尝试，该工具丰富了我们对Go项目进行安全漏洞检查的手段。 注：关于供应链安全问题，Russ Cox近期有一个专门的Talk：Open Source [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language">本文永久链接</a> &#8211; https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language</p>
<p>时光荏苒，转眼间已经是2023年的最后一天了。《<a href="https://tonybai.com/2022/12/29/the-2022-review-of-go-programming-language">2022年Go语言盘点：泛型落地，无趣很好，稳定为王</a>》仿佛就写在昨天。</p>
<p>回首这一年，全球彻底从新冠大流行中得以复苏，Go语言也不例外，最直观的表现就是<strong>全球各地的GopherCon技术大会或小型Meetup都纷纷从停办/线上的状态来到了线下</strong>，并获得Gopher们的热烈欢迎和踊跃参与，比如下图中的<a href="https://www.gophercon.com/">GopherCon</a>、<a href="https://www.gophercon.co.uk/">GopherCon UK</a>、<a href="https://gophercon.eu/">GopherCon Europe</a>、<a href="https://gophercon.com.au/">GopherCon Australia</a>、<a href="https://golab.io/">Golab</a>等。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-2.png" alt="" /></p>
<p>尤其值得一提的是我们本土最大的Gopher技术大会<a href="https://mp.weixin.qq.com/s?__biz=MzIyNzM0MDk0Mg==&amp;mid=2247494867&amp;idx=1&amp;sn=9bf0dfa3ef48867da891aac4359a0c5e&amp;chksm=e8600b32df178224428d5ee27fd11e379011afc0bdb7e0445617275c4c43c484f72200b585dc#rd">GopherChina 2023</a>，今年为了满足不同地域Gopher的需求，GoCN社区在6月和11月分别在北京和上海举办了两次GopherChina大会，这也是历史首次。</p>
<p>Go语言团队的大神们也开始重新“乐此不疲”地参与到上述这些大会中，以推进全球Go社区与生态的建设。就连已经退居二线的<a href="https://tonybai.com/2023/12/11/simplicity/">Go语言之父Rob Pike</a>也亲自“现身说法”，在年底的GopherCon Australia 2023上发表了“What We Got Right, What We Got Wrong”的主题演讲来回顾Go诞生以来的得与失。</p>
<p>大神回顾一生，我们盘点一年。在这篇文章中，我就和大家一起聊聊Go在2023年的状态、所处的位置以及Go未来演进的机制与策略。</p>
<h2>1. Go的2023</h2>
<h3>1.1 稳</h3>
<p>一如往年，Go在2023年发布了两个大版本，分别是2023年2月份的<a href="https://tonybai.com/2023/02/08/some-changes-in-go-1-20/">Go 1.20</a>和8月份的<a href="https://tonybai.com/2023/08/20/some-changes-in-go-1-21">Go 1.21</a>。</p>
<p>在这两个版本中，Go语法特性一如既往的求稳，除了支持<strong>切片类型到数组类型(或数组类型的指针)的类型转换</strong>，其余更是像语法的修修补补，比如：comparable“放宽”了对泛型实参的限制、unsafe包继续添加“语法糖”、增加min、max和clear预定义函数、增强type inference能力等。</p>
<p>这些并不会让Gopher感到“意外”，因为这与<a href="https://tonybai.com/2022/12/29/the-2022-review-of-go-programming-language">Russ Cox在2022年宣称的“Go is boring”</a>的精神是一脉相承的。</p>
<p>不过，除了Go语法特性变化方面的“寡淡”之外，Go在其他方面还是求新和求变的，接下来我们先来看看Go是如何求新的。</p>
<blockquote>
<p>注：求新与求变可能存在交集的地方，边界可能也有一定模糊性，也存在相互促进的情况，希望大家阅读下面内容时不要吹毛求疵:)。</p>
</blockquote>
<h3>1.2 求新</h3>
<p>Go在语法特性求稳的同时，在编译器、工具链、运行时以及标准库等方面都在努力优化和打磨，旨在进一步提升Go兼具的生产力与运行时效率，其中很多优化和打磨的措施不乏新颖。</p>
<p><a href="https://go.dev/blog/pgo-preview">Go 1.20版本中首次引入的PGO(profile-guided optimization)技术预览版</a>，到Go 1.21版本变为默认开启，Go官方给出的PGO优化的效果数据是：PGO优化带来的性能提升一般是2%~7%，而在<a href="https://tonybai.com/2023/12/25/go-1-22-foresight">最新的Go 1.22rc1</a>中，这个数字已经变为2%~14%了。</p>
<p>在内存管理方面，<a href="https://github.com/golang/go/issues/51317">Go 1.20引入了试验特性arena包</a>，虽然它没能在Go 1.21中按时转正，如今处于proposal-hold状态，但这也算是一次在内存管理机制上的求新。</p>
<p>Go是一门面向软件工程的编程语言，在这一年中，Go在软件工程领域的求新例子也是不少。比如：可用于大幅简化Go项目创建的<a href="https://tonybai.com/2023/08/11/introduction-to-the-gonew-tool">gonew</a>工具，它支持基于go project template clone并创建一个属于你的Go项目；再比如<a href="https://go.dev/blog/integration-test-coverage">对应用执行时的代码覆盖率的采集</a>，可以帮助开发者更进一步了解最终可执行程序代码执行路径上的测试覆盖情况；而<a href="https://tonybai.com/2022/09/10/an-intro-of-govulncheck">govulncheck工具</a>则是Go在软件工程与<a href="https://tonybai.com/2022/03/14/software-supply-chain-security-in-go">供应链安全</a>领域的求新尝试，该工具丰富了我们对Go项目进行安全漏洞检查的手段。</p>
<blockquote>
<p>注：关于供应链安全问题，Russ Cox近期有一个专门的Talk：<a href="https://research.swtch.com/acmscored">Open Source Supply Chain Security at Google</a>，感兴趣的童鞋可以学习一下。</p>
</blockquote>
<p>Go始终对IT界出现的新技术、新趋势以及Go社区的新想法保持open。在WASM出现早期，<a href="https://tonybai.com/2018/11/19/some-changes-in-go-1-11/">Go就提供了对wasm的porting支持</a>，如今在Go 1.21中，Go还对尚未形成最终规范的<a href="https://go.dev/blog/wasi">WASI(WebAssembly System Interface)</a>提供了支持。</p>
<p>Go社区的反馈也是Go团队求新的来源，比如一个典型例子就是<a href="https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go">log/slog加入标准库</a>，让Go标准库原生支持了结构化日志输出，且日志性能不输<a href="https://tonybai.com/2021/07/14/uber-zap-advanced-usage">像zap这样的第三方开源log包</a>。</p>
<p>Go社区也跟随Go团队的节奏，走在求新的道路上。2023年，IT界最大的事件就是<strong>以ChatGPT为代表的大语言模型的横空出世</strong>，这很可能是一个百年不遇的、对人类文明进步有着重要里程碑意义的事件。各行各业，言必称大模型，言必称AI。在传统机器学习、深度学习以及<a href="https://tonybai.com/2023/05/21/go-and-nn-part1-tensor-operations">神经网络</a>方面生态并不丰富的Go，也在尝试与大模型对接，比如：支持快速在本地启动和运行llama2、mistral 7B、codellama、vicuna等大模型的<a href="https://github.com/jmorganca/ollama">ollama开源项目</a>在短短几个月就收获近30k个小星星的关注；再比如Gemini大模型推出后，Google一并开源了支持与Google各种大模型项目对接的<a href="https://github.com/google/generative-ai-go">Google AI Go SDK开源项目</a>，并提供了详细的教程<a href="https://ai.google.dev/tutorials/go_quickstart?hl=zh-cn">指导Gopher如何通过该SDK与大模型交互</a>。</p>
<blockquote>
<p>注：Google把Gemini Pro的API免费提供给个人用户了，该模型具备GPT 3.5 级别的能力，32k 上下文，38 种语言支持以及多模态支持，唯一的约束是每分钟60个请求。</p>
</blockquote>
<p>在<a href="https://go.dev/blog/survey2023-h2-results">2023年第二次Go用户调查报告</a>中，Go 开发者表示，他们对改善其编写代码的质量、可靠性和性能的人工智能/机器学习工具感兴趣，而不是编写代码的工具。一位时刻警醒、从不忙碌的专家“审阅者”可能是一种更有帮助的AI开发者辅助形式。Go官方表示了对该调查结果的重视，也许在后续的Go工具链中“AI加持”会成为常态。</p>
<h3>1.3 求变</h3>
<p>2023年8月，在Go 1.21版本刚刚发布后，Go官博就发布了Russ Cox编写的两篇文章：《<a href="https://go.dev/blog/compat">Backward Compatibility, Go 1.21, and Go 2</a>》和《<a href="https://go.dev/blog/toolchain">Forward Compatibility and Toolchain Management in Go 1.21</a>》，进一步明确了Go承诺的向后兼容的范围和方案，并<a href="https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/">第一次阐述了向前兼容性的具体方案</a>，这两篇文章为Go语言后续的“求变”奠定了理论基础。</p>
<p>在向后兼容方面，从Go 1.21开始Russ Cox提出一些举措，比如：Go将扩展和规范化了GODEBUG的使用，其大致思路如下：</p>
<ul>
<li>对于每个在Go1兼容性承诺范围内的且可能会破坏(break)现有代码的新特性/新改变(比如：panic(nil)语义的改变)加入时，Go会向GODEBUG设置<br />
中添加一个新选项(比如GODEBUG=panicnil=1)，以保留采用原语义进行编译的兼容能力；</li>
<li>GODEBUG中新增的选项将至少保留两年(4个Go release版本)，对于一些影响重大的GODEBUG选项(比如http2client和http2server)，保留的时间可能更长，甚至一直保留；</li>
<li>GODEBUG的选项设置与go.mod的go version是匹配的。例如，即便你现在的工具链是Go 1.21，如果go.mod中的go version为1.20，那么GODEBUG控制的新特性语义将不起作用，依旧保持Go 1.20时的行为。除非你将go.mod中的go version升级为go 1.21.0；</li>
<li>在Go 1.21及以后版本中，除了可以使用像GODEBUG=panicnil=1的环境变量恢复原先语义外，还可以在main包中使用//go:debug指示符。</li>
</ul>
<p>在向前兼容方面，Russ Cox提出的方案有些复杂难懂，这里就不赘述了，感兴趣的童鞋可以阅读一下我之前的文章《<a href="https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/">聊聊Go语言的向前兼容性和toolchain规则</a>》了解更多细节。</p>
<h4>1.3.1 语法填坑</h4>
<p>在Go的诸多“求变”中，影响最大的还是对已有语法坑的“修正”，这些“填坑”工作或多或少都会对存量代码带去影响，甚至是break change，Go社区的反对声音也是不少。但无论怎样，这些工作已经在Go 1.21版本拉开帷幕了。比如：改变panic(nil)的语义以及对<a href="https://go.dev/blog/loopvar-preview">循环变量语义的变更</a>，大家可以在《<a href="https://tonybai.com/2023/08/20/some-changes-in-go-1-21/">Go 1.21中值得关注的几个变化</a>》一文中了解更多细节。</p>
<p>对现有语法坑的修正也进一步促进了“求新”，比如在修正loopvar语义的同时，for range支持对更多类型表达式的迭代也在进行中，比如Go 1.22中，<a href="https://tonybai.com/2023/12/25/go-1-22-foresight/">for range将支持迭代整型表达式</a>，并以试验特性提供了对函数迭代器的支持。</p>
<h4>1.3.2 标准库v2示范</h4>
<p>Go号称是“自带电池”的语言，其高质量的标准库得到了广大Gopher的欢迎。Go团队也一直努力推进Go标准库功能的丰富性，比如：Go 1.22中对http.ServeMux功能进行了增强，使其像第三方的gorilla/mux那样增加对带有通配符路由的匹配。</p>
<p><a href="https://tonybai.com/2023/12/25/go-1-22-foresight/">Go 1.22中，标准库还首次出现了v2版本包：math/rand/v2</a>，这为后续标准库的vN方式演进提供了示范，从Go团队的官方issue、discussion中了解到，后续如sync/v2、encoding/json/v2等已经列上日程了。</p>
<h2>2. Go所处的位置</h2>
<p>很多人关注Go当前的状态：国内大厂用的多么？小厂是不是也在广泛采纳。这些问题我在往年的Go语言盘点时也都做过梳理，今年就不再提了。没有哪个大厂在广泛采用一门语言后，会在一年内全部推翻重写的；小厂对Go的采纳也是有惯性的。</p>
<p>今年先从我的两个意外“收获”开始。</p>
<h3>2.1 两个意外的“收获”</h3>
<p>2023年10月中旬，世界知名电动车厂商Tesla发布了<a href="https://developer.tesla.com/docs/fleet-api">新版fleet API</a>和<a href="https://github.com/teslamotors/vehicle-command">vehicle command SDK</a>，鉴于本人也在智能网联汽车行业内打拼，于是对Tesla的此次发布做了一些深入了解。在Tesla的github主页上我赫然发现：Go是目前Tesla开源项目的第二大语言。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-3.png" alt="" /></p>
<p>相对于传统的主机厂(车厂)，Telsa算是比较开放的了。开放包含两个含义，一是将车端能力的开放，二是项目的开源。就目前了解到，国内主机厂还鲜有将车端能力开放出来的，开源就更是鲜见。但Tesla在这两方面都做到了，既开放了车端API，又做了针对性的开源，虽然目前其开源项目并不多。以前Tesla涉及到云端服务的项目多用<a href="">Ruby</a>，但从2022年开始，Go语言的使用逐渐增多，包括前面提到的Fleet API的<a href="https://github.com/teslamotors/fleet-telemetry">Fleet Telemetry的参考server实现</a>以及<a href="https://github.com/teslamotors/vehicle-command">Tesla车辆远控SDK</a>。</p>
<p>我们再来看看Apache基金会。众所周知，Apache基金会的开源项目多以Java语言为主，但一次偶然的机会翻看Apache基金会的github项目主页，我发现Go语言在Apache开源项目中已经悄悄地跻身到第五名，如果仅算后端语言的话，Go排名第三，仅次于Java和Python。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-4.png" alt="" /></p>
<p>并且，Apache基金会下面的Go项目实际也不少，大家可以通过https://github.com/orgs/apache/repositories?language=go&amp;type=all查询。其中还不乏优秀之作，比如：<a href="https://github.com/apache/incubator-answer">构建Q&amp;A知识系统的answer</a>、<a href="https://github.com/apache/dubbo-go">Apache Dubbo的go实现dubbo-go</a>、<a href="https://github.com/apache/trafficcontrol">CDN实现trafficcontrol</a>、<a href="https://github.com/apache/camel-k">Kubernetes原生的轻量级企业应用集成框架Camel K</a>、<a href="https://tonybai.com/2023/06/25/a-guide-of-using-apache-arrow-for-gopher-part1">Apache Arrow的Go实现</a>以及<a href="https://github.com/apache/incubator-devlake">针对开发过程的聚合数据平台devlake</a>等。</p>
<p>我们知道：Apache项目在企业级应用和平台方面具有广泛的应用，从Go语言在Apache基金会项目中的使用比例的提升现象来看，Go在企业应用市场中的普及度和受欢迎程度确实有所增长。</p>
<h3>2.2 Go语言排名</h3>
<p>编程语言之间的竞争与争议，通常被称为“编程语言战争”(programming language war)，它其实反映了不同技术群体和范式之间的碰撞。这些“火药味”比较浓的语言之争通常比较主观。近10年来，业界出现了一些被广泛接受的编程语言排行榜，它们基于一些相对客观的数据来反映不同编程语言在现实开发中的真实状态。但不同编程语言排行榜都有不同的数据来源和数据模型，单一的排行榜往往是“盲人摸象”，无法反映全貌。但目前又没有一个可以让我们一窥全貌的权威排行榜。因此，要想更客观地、更全面的反映一门编程语言的实际情况，我们需要将多个排行榜参照着看。</p>
<p>下面我们就来看看在目前世界上著名的编程语言排行榜上，Go语言在其中的最新排名情况(请注意：各个榜单的发布时间不同，导致各榜单的数据会有一定时间差)。</p>
<h4>2.2.1 <a href="https://pypl.github.io/PYPL.html">PYPL编程语言排行榜</a></h4>
<p>PYPL编程语言流行指数是通过分析语言教程在谷歌上的搜索频率而创建的。语言教程被搜索的次数越多，说明该语言越受欢迎，原始数据来自Google Trends：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-5.png" alt="" /><br />
<center>PYPL编程语言排行榜，数据时间：2023.12</center></p>
<h4>2.2.2 <a href="https://spectrum.ieee.org/the-top-programming-languages-2023">IEEE Spectrum排行榜</a></h4>
<p>IEEE Spectrum排行榜是通过调查来自全球软件工程师和招聘网站的数据，统计各语言的流行度的：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-6.png" alt="" /><br />
<center>IEEE Spectrum排行榜，数据时间：2023.8</center></p>
<h4>2.2.3 <a href="https://redmonk.com/sogrady/2023/05/16/language-rankings-1-23/">RedMonk编程语言排行榜</a></h4>
<p>RedMonk排行榜是根据GitHub和Stack Overflow这两个开发者社区上的讨论数量来推算语言的受关注度。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-7.png" alt="" /><br />
<center>RedMonk编程语言排行榜，数据时间：2023.5</center></p>
<h4>2.3.4 <a href="https://github.blog/2023-11-08-the-state-of-open-source-and-ai/">Github Octoverse</a></h4>
<p>GitHub Octoverse排行榜直观反映了过去一年GitHub上各编程语言的实际使用和流行趋势，是从开源项目量的维度来衡量编程语言活跃度的。在Top 10语言榜单上，2023年Go超越Ruby第一次跻身Github Top10语言：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-8.png" alt="" /><br />
<center>Github Octoverse编程语言排行榜，数据时间：2023.11</center></p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-9.png" alt="" /><br />
<center>Github Octoverse编程语言排行榜，数据时间：2023.11</center></p>
<h4>2.3.5 <a href="https://madnight.github.io/githut/">Github Language Stats(githut)</a></h4>
<p>Github Language Stats是一个个人项目，它基于github公开数据，按时间、pr数量、star数量等维度对各个语言在github上的使用情况进行分析：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-10.png" alt="" /><br />
<center>Githut按PR数量，数据时间：2023第三季度</center></p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-11.png" alt="" /><br />
<center>Githut按Star数量，数据时间：2023第三季度</center></p>
<h4>2.3.6 <a href="https://www.tiobe.com/tiobe-index/">TIOBE编程语言排行榜</a></h4>
<p>TIOBE编程语言排行榜理论上来说，是世界上最知名的编程语言排行榜，它根据各大搜索引擎编程语言相关的搜索查询量来计算一个综合指数。但这些年TIOBE榜单数据的“上蹿下跳”，让开发者对该榜单是“又爱又恨”。下面是TIOBE index 2023年12月份的榜单：</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-2023-review-of-go-programming-language-12.png" alt="" /></p>
<p>当你看到Fortran排在Go的前面，你就get到该榜单的抽风式的“不靠谱”了:)。</p>
<p>综合上述6个榜单，我们可以看到Go语言的2023基本处于稳定发展状态，没有“大踏步”的前进，也没有意想不到的大幅退步。</p>
<p>今年在国内某乎上总有一些有关“Go在国内是否已凉”的话题，从上面实际情况来看，话题中那些抹黑Go的观点可以不攻自破了。有人会说Rust的强势上升对Go会有一定冲击，这的确不可否认，就像Go当年火速蹿升给Java带去一定冲击一样，这是一门编程语言在演进阶段必会经历的过程，没有什么值得大惊小怪的。5年后，Rust可能同样也会受到来自其他语言的冲击。</p>
<p>Go语言未来会变得如何，关键还要看Go团队对Go未来演进方向的把握是否得当以及Go社区与生态是否给力。2023年，Go团队也明确了未来的演进机制和策略，接下来我们就来看看。</p>
<h2>3. Go的未来演进</h2>
<p>2023年是<a href="https://tonybai.com/2023/11/11/go-opensource-14-years/">Go语言开源的第14个年头</a>，Go语言早已蜕下了少年期的青涩，进入到了青年期。这意味着它拥有了越来越成熟稳定的语言特性，同时生态系统也日益丰富完善。作为一门青壮年语言，Go语言在系统设计方面展现出的高度工程化思想，使其轻松应对复杂系统的构建。以go module为主的模块化支持帮助大规模程序更加清晰化，丰富的并发控制手段使其可以处理海量请求。与此同时，Go语言生态也在蓬勃成长——各种高质量框架应运而生，无数module可复用，大量的云原生组件可供选择。这为开发者极大减轻了从零开始搭建系统的工作量。</p>
<p>和我们人类一样，一门语言进入青年期后的成熟特征并不能完全掩饰其未来演进的迷茫！在Ken Thompson、Rob Pike相继退休后，Russ Cox成为了Go这艘大船的“掌舵者”，Russ Cox与Go团队对编程语言的思考，对Go语言价值观的判断将直接决定Go未来的航向。</p>
<p>好在，在2023年的GopherCon大会上，我们得到了Russ Cox的答案：那就是<a href="https://tonybai.com/2023/12/10/go-changes/">基于共同目标和数据驱动的决策</a>。这里借用Russ Cox在演讲中给出的结论来看看具体的演进驱动机制：</p>
<ul>
<li>首先，Go需要不断变化，特别是随着计算世界的变化。</li>
<li>其次，任何改变的目标都是为了使Go在软件工程中变得更好，尤其是在规模化(scaling)方面。</li>
<li>第三，一旦我们确定了目标，达成共识的下一个最重要的部分是拥有共享数据来做出决策。</li>
<li>第四，Go工具链遥测是增补我们现有调查和代码分析数据的重要数据来源。</li>
</ul>
<p>综上来看，Go团队要“拥抱变化”，但不能“无头苍蝇”一样的胡乱改变，而是严谨地基于广泛的数据反馈，包括来自用户调查、vscode插件运行的用户反馈、全年进行的研究访谈和用户体验研究等，以及来自即将<a href="https://research.swtch.com/telemetry">加入Go工具链的可选遥测(opt-in Telemetry)功能</a>获取到的更多真实的Go使用数据。</p>
<p>相信在Go工具链的可选遥测(opt-in Telemetry)功能加入后，Go团队能基于这些用户数据拿到更准确地决策依据，继续让Go这艘大船行驶在正确、光明的航向上！</p>
<h2>4. 小结</h2>
<p>在2023年，Go语言继续保持了其稳定性和可靠性的特点。发布了两个大版本，Go 1.20和Go 1.21，其中语法特性的改变相对较少，注重修复和优化。然而，Go语言在其他方面仍然保持着求新和求变的态势。</p>
<p>Go语言团队致力于优化编译器、工具链、运行时和标准库，以提升生产力和运行时效率。引入了一些新的特性和优化措施，例如PGO（profile-guided optimization）技术的引入和优化、内存管理方面的改进等。同时，Go语言在软件工程领域也进行了一些创新，如简化项目创建的gonew工具、代码覆盖率的采集工具、供应链安全领域的govulncheck工具等。</p>
<p>Go语言始终保持对新技术、新趋势和社区的开放姿态。在2023年，Go语言对WASM和WASI的支持得到了进一步加强。同时，Go社区也积极响应并跟随Go团队的步伐，面对IT界出现的大语言模型等新兴技术，Go社区也在不断探索和应用。</p>
<p>总体而言，2023年对于Go语言来说是一个稳中求新、稳中求变的年份。Go语言保持着其简洁、高效和易用的特点，同时积极适应和采纳新的技术和需求，为开发者提供更好的开发体验和工具支持。</p>
<p>展望未来，Go团队已经明确了更加以共识和用户数据为驱动的演进机制，保证Go的发展方向与实际需求保持同步。随着可选的工具链遥测功能加入，相信他们能基于更丰富的用户数据做出更正确、更具预见性的正确决策。</p>
<p>我个人依旧坚持我之前的判断：<strong>Go将进入或已处于自己的黄金5-10年</strong>。</p>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">“Gopher部落”知识星球</a>旨在打造一个精品Go学习和进阶社群！高品质首发Go技术文章，“三天”首发阅读权，每年两期Go语言发展现状分析，每天提前1小时阅读到新鲜的Gopher日报，网课、技术专栏、图书内容前瞻，六小时内必答保证等满足你关于Go语言生态的所有需求！2023年，Gopher部落将进一步聚焦于如何编写雅、地道、可读、可测试的Go代码，关注代码质量并深入理解Go核心技术，并继续加强与星友的互动。欢迎大家加入！</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; 2023, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2012小结</title>
		<link>https://tonybai.com/2012/12/18/my-summary-of-2012/</link>
		<comments>https://tonybai.com/2012/12/18/my-summary-of-2012/#comments</comments>
		<pubDate>Tue, 18 Dec 2012 07:43:04 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[生活簿]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[Programmer]]></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">http://tonybai.com/?p=1149</guid>
		<description><![CDATA[趁着世界末日尚未到来，赶紧将2012年总结一番，即便是末日也不能留遗憾不是^_^。 2012年总体过得还算充实： *《七周七语言》终于出版了； * 写了近80篇Blog，虽离目标预期还有差距，但也给我带来了不小的精神愉悦； * 为《程序员》杂志写了两篇文章，虽然都是短文； * 读了30多本书，还有10多本尚未读完，不过年初制定的&#8220;扫存书&#8221;目标没能达成，因为依然不断地有大量的新书加入^_^； * 学习了一门编程语言Go（而不是年初确定的Clojure等）； * 将自己的一些关于工作方法、团队建设和管理的认知和实践总结了出来，算是一个阶段性的小结，内容包括绩效目标制定、绩效面谈、高效会议、写好Mail、个人时间管理、知识管理新认知、团队经营等诸多方面。也许后续还有补充。 2012年在工作方面的表现略显平淡。恰应了那句古语：有心栽花花不活。年初和团队成员共同确定了今年的年度主题词为&#8220;收获&#8221;，但一年下来的结果 却是差强人意：我最重视的一个关键项目没能如期发布，可谓是今年之最大憾事。我的责任自然不能脱掉，主因在于我年初过于乐观的估计。至于在其他方 面即便有较大进展，也无法弥补这一遗憾给我带来的不快。 2012年将buildc实际应用到了产品构建中，同时发现了诸多问题，也收到了许多同事的反馈。buildc也因此在持续演进，从0.1.4版本到 目前的0.2.1版本。近期正在酝酿0.3.x版本，这次改动较大，调整了很多当初的设计思路，与0.2.x版本并不兼容了。 2012年在家庭方面自我感觉收获还是颇多的。从数字上看，年初确定的年度家庭目标80%都实现了，这些目标有对父母的、有对孩子的，也有对LP 的，这让我颇为欣慰啊。最让我欣喜的是看到了女儿果果的成长，尤其是其语言能力的提升，让我们从此不必再担心了。现在面对果果这样一个已经可以与 我进行语言交流的小家伙儿，心中总是有一种莫名的感动，感谢上天赐予我这个可爱的小家伙儿 ^_^。将心比心，现在真心感觉到父母对待子女可真是没有半点私心，都是全心全力的为儿女服务，所以每个人都更应该善待父母。今年下半年，母亲得了眼 病，做了一个小手术，我也请假回家照顾。平时和父母不在一个城市生活，方方面面无法顾及，甚感惭愧，这次回家让我心灵有了些许慰藉，也让我第一次有了尽孝道的感觉。以后我每年都会设定家庭目标，但今后的家庭目标实现难度都很大，尽力而为吧^_^。 读书已然是生活中不可缺少的一部分了，但2012年似乎有些懒惰了。虽然读的书目也不少，但总感觉缺少些效率。 过去的都过去了，2012虽有小成，但觉得进步有限。身旁的人与物太过熟悉稳定，人就会变得像温水中的那只青蛙。 2013，期待能有些变化。 &#169; 2012, bigwhite. 版权所有.]]></description>
			<content:encoded><![CDATA[<p>趁着世界末日尚未到来，赶紧将2012年总结一番，即便是末日也不能留遗憾不是^_^。</p>
<p>	2012年总体过得还算充实：</p>
<p>	*《<a href="http://tonybai.com/2012/05/08/translate-seven-languages-in-seven-weeks/">七周七语言</a>》终于出版了；<br />
	* 写了近80篇Blog，虽离目标预期还有差距，但也给我带来了不小的精神愉悦；<br />
	* 为《程序员》杂志写了<a href="http://tonybai.com/2012/10/26/some-practice-on-improving-tech-preach/">两篇文章</a>，虽然都是短文；<br />
	* 读了<a href="http://book.douban.com/people/tony_bai/collect">30多本书</a>，还有<a href="http://book.douban.com/people/tony_bai/do">10多本</a>尚未读完，不过年初制定的&ldquo;扫存书&rdquo;目标没能达成，因为依然不断地有大量的新书加入^_^；<br />
	* 学习了一门编程语言<a href="http://tonybai.com/tag/Go">Go</a>（而不是年初确定的<a href="http://clojure.org">Clojure</a>等）；<br />
	* 将自己的一些关于工作方法、团队建设和管理的认知和实践总结了出来，算是一个阶段性的小结，内容包括<a href="http://tonybai.com/2012/11/17/several-important-factors-in-making-performance-goals/">绩效目标制定</a>、<a href="http://tonybai.com/2012/12/13/some-opinions-about-performance-interview/">绩效面谈</a>、<a href="http://tonybai.com/2012/12/03/how-to-organize-and-hold-meetings-efficiently/">高效会议</a>、<a href="http://tonybai.com/2012/11/28/how-to-write-a-good-email/">写好Mail</a>、<a href="http://tonybai.com/2012/11/23/some-experience-on-personal-time-management/">个人时间管理</a>、<a href="http://tonybai.com/2012/11/04/the-amateur-way-of-knowledge-management/">知识管理</a>新认知、<a href="http://tonybai.com/2012/11/01/some-experience-on-team-management/">团队经营</a>等诸多方面。也许后续还有补充。</p>
<p>	2012年在工作方面的表现略显平淡。恰应了那句古语：有心栽花花不活。年初和团队成员共同确定了今年的年度主题词为&ldquo;收获&rdquo;，但一年下来的结果 却是差强人意：我最重视的一个关键项目没能如期发布，可谓是今年之最大憾事。我的责任自然不能脱掉，主因在于我年初过于乐观的估计。至于在其他方 面即便有较大进展，也无法弥补这一遗憾给我带来的不快。</p>
<p>	2012年将<a href="http://code.google.com/p/buildc">buildc</a>实际应用到了产品构建中，同时发现了诸多问题，也收到了许多同事的反馈。buildc也因此在持续演进，从<a href="http://tonybai.com/2012/04/12/buildc-0-1-4-release/">0.1.4</a>版本到 目前的<a href="http://tonybai.com/2012/12/06/buildc-0-2-1-release/">0.2.1</a>版本。近期正在酝酿0.3.x版本，这次改动较大，调整了很多当初的设计思路，与0.2.x版本并不兼容了。</p>
<p>	2012年在家庭方面自我感觉收获还是颇多的。从数字上看，年初确定的年度家庭目标80%都实现了，这些目标有对父母的、有对孩子的，也有对LP 的，这让我颇为欣慰啊。最让我欣喜的是看到了女儿<a href="http://tonybai.com/2012/11/27/some-growing-up-details-of-my-two-years-old-daughter/">果果的成长</a>，尤其是其语言能力的提升，让我们从此不必再担心了。现在面对果果这样一个已经可以与 我进行语言交流的小家伙儿，心中总是有一种莫名的感动，感谢上天赐予我这个可爱的小家伙儿 ^_^。将心比心，现在真心感觉到父母对待子女可真是没有半点私心，都是全心全力的为儿女服务，所以每个人都更应该善待父母。今年下半年，母亲得了眼 病，做了一个小手术，我也请假回家照顾。平时和父母不在一个城市生活，方方面面无法顾及，甚感惭愧，这次回家让我心灵有了些许慰藉，也让我第一次有了尽孝道的感觉。以后我每年都会设定家庭目标，但今后的家庭目标实现难度都很大，尽力而为吧^_^。</p>
<p>	读书已然是生活中不可缺少的一部分了，但2012年似乎有些懒惰了。虽然读的书目也不少，但总感觉缺少些效率。</p>
<p>	过去的都过去了，2012虽有小成，但觉得进步有限。身旁的人与物太过熟悉稳定，人就会变得像温水中的那只青蛙。</p>
<p>2013，期待能有些变化。</p>
<p style='text-align:left'>&copy; 2012, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2012/12/18/my-summary-of-2012/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
