<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>技术志 on Tony Bai</title><link>https://tonybai.com/categories/%E6%8A%80%E6%9C%AF%E5%BF%97/</link><description>Recent content in 技术志 on Tony Bai</description><generator>Hugo</generator><language>zh-cn</language><copyright>2004-2026 Tony Bai. 版权所有.</copyright><lastBuildDate>Fri, 26 Jun 2026 18:06:21 +0800</lastBuildDate><atom:link href="https://tonybai.com/categories/%E6%8A%80%E6%9C%AF%E5%BF%97/index.xml" rel="self" type="application/rss+xml"/><item><title>偿还十年技术债：深度拆解 Go 1.27 的 GODEBUG 强力清理计划</title><link>https://tonybai.com/2026/06/26/policy-for-removing-godebug-flags/</link><pubDate>Fri, 26 Jun 2026 18:06:21 +0800</pubDate><guid>https://tonybai.com/2026/06/26/policy-for-removing-godebug-flags/</guid><description>&lt;p&gt;&lt;img alt="题图" loading="lazy" src="https://tonybai.com/images/wp-content/uploads/2026/policy-for-removing-godebug-flags-1.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tonybai.com/2026/06/26/policy-for-removing-godebug-flags"&gt;本文永久链接&lt;/a&gt; – &lt;a href="https://tonybai.com/2026/06/26/policy-for-removing-godebug-flags"&gt;https://tonybai.com/2026/06/26/policy-for-removing-godebug-flags&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;大家好，我是Tony Bai。&lt;/p&gt;
&lt;p&gt;2012 年 3 月，Go 1.0 的发布确立了那条被奉为开源界圣经的规则——&lt;strong&gt;Go 1 兼容性保证（Go 1 compatibility guarantee）&lt;/strong&gt;。它承诺的大意：任何符合 Go 1 规范的程序，在未来的 Go 1.x 版本中，无需修改即可直接编译并正确运行。&lt;/p&gt;</description></item><item><title>浏览器里的“安全阴谋”：为什么 Go 1.27 的 UUIDv7 会离奇丧失随机性？</title><link>https://tonybai.com/2026/06/25/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers/</link><pubDate>Thu, 25 Jun 2026 16:46:56 +0800</pubDate><guid>https://tonybai.com/2026/06/25/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers/</guid><description>&lt;p&gt;&lt;img alt="题图" loading="lazy" src="https://tonybai.com/images/wp-content/uploads/2026/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers-1.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tonybai.com/2026/06/25/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers"&gt;本文永久链接&lt;/a&gt; – &lt;a href="https://tonybai.com/2026/06/25/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers"&gt;https://tonybai.com/2026/06/25/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;大家好，我是Tony Bai。&lt;/p&gt;
&lt;p&gt;在刚刚发布&lt;a href="https://tonybai.com/2026/06/24/go-1-27-foresight"&gt;第一个候选版本（RC1）的 Go 1.27&lt;/a&gt; 中，一个让开发者感到贴心的特性升级，莫过于标准库终于原生内建了 &lt;strong&gt;uuid&lt;/strong&gt; 包。我们终于可以告别第三方依赖，用最地道、最安全的方式在标准库里生成高并发、时间有序的 &lt;strong&gt;UUIDv7&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Go 1.27新特性前瞻：泛型方法落地，标准库内建 UUID</title><link>https://tonybai.com/2026/06/24/go-1-27-foresight/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/24/go-1-27-foresight/</guid><description>本文永久链接 – https://tonybai.com/2026/06/24/go-1-27-foresight 大家好，我是Tony Bai。 随着 2026 年中 Go 1.27 开发分支的功能冻结与首个RC版本的发布，Go 语言生态再次迎来了一个令人瞩目的关键节点。 回望刚刚过去的半年，Go 语言在 Go 1.26 中通过 Green Tea GC 和 逃逸分析升级 实现了极致的性能压榨。...</description></item><item><title>AI 正在撕裂研发团队：狂欢的“托管派”与心碎的“守夜人”</title><link>https://tonybai.com/2026/06/23/ai-divide-developers-into-lazy-juniors-and-the-burnedout-seniors/</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/23/ai-divide-developers-into-lazy-juniors-and-the-burnedout-seniors/</guid><description>本文永久链接 – https://tonybai.com/2026/06/23/ai-divide-developers-into-lazy-juniors-and-the-burnedout-seniors 大家好，我是Tony Bai。 在铺天盖地的技术宣传中，我们每天都在听到关于 AI 如何实现“10倍速研发”、“干掉技术债”的宏大叙事。每个大厂的 CTO 都在兴奋地描绘着未来的降本增效蓝图...</description></item><item><title>屠榜 CNCF！为什么在云原生时代，Go 语言能把 Java、C++ 和 Rust 堵在门外？</title><link>https://tonybai.com/2026/06/22/why-is-go-dominating-in-cncf-landscape/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/22/why-is-go-dominating-in-cncf-landscape/</guid><description>本文永久链接 – https://tonybai.com/2026/06/22/why-is-go-dominating-in-cncf-landscape 大家好，我是Tony Bai。 如果你去翻阅 CNCF（云原生计算基金会）的全景图（Landscape），你会发现一个极其震撼、甚至近乎垄断的现象： 从奠定容器时代基础的 **Docker**，到统治现代云编排的 **Kubernetes**...</description></item><item><title>上千程序员自爆 AI 的“卧槽时刻”：是推开神界大门，还是跌入黑盒地狱？</title><link>https://tonybai.com/2026/06/21/what-was-your-oh-shit-moment-with-genai/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/21/what-was-your-oh-shit-moment-with-genai/</guid><description>本文永久链接 – https://tonybai.com/2026/06/21/what-was-your-oh-shit-moment-with-genai 大家好，我是Tony Bai。 在社区 Hacker News 上，最近一个名为 **“Ask HN: 大家在生成式 AI 中经历过哪些‘卧槽（Oh Shit）’时刻？”** 的帖子瞬间引爆了全网。 这个帖子在短短两天内斩获了近千百条回复和...</description></item><item><title>大模型正在见顶！传奇架构师：欢迎来到“平坦曲线时代”</title><link>https://tonybai.com/2026/06/20/steve-yegge-the-flat-curve-society/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/20/steve-yegge-the-flat-curve-society/</guid><description>本文永久链接 – https://tonybai.com/2026/06/20/steve-yegge-the-flat-curve-society 大家好，我是Tony Bai。 在过去的两年里，全球的软件创业者和开发者都生活在一种**“技术栈焦虑”**中。 你今天刚熬夜写完一个产品，或者刚拿到一笔融资准备大干一步，脑子里却时刻悬着一把达摩克利斯之剑：**“如果两周后新版Claude或GPT模型...</description></item><item><title>Anthropic 40万大样本揭秘：AI 时代为什么“专家”身价暴涨？</title><link>https://tonybai.com/2026/06/19/agentic-coding-and-persistent-returns-to-expertise/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/19/agentic-coding-and-persistent-returns-to-expertise/</guid><description>本文永久链接 – https://tonybai.com/2026/06/19/agentic-coding-and-persistent-returns-to-expertise 大家好，我是Tony Bai。 在生成式 AI 狂飙的今天，程序员群体正陷入一种前所未有的分化和焦虑中： - 初级开发觉得前路茫茫，因为大模型写出的业务代码比他们更快、更整洁； - 资深架构师虽然暂时安全，但也时刻担心...</description></item><item><title>在 AI 编码时代，为什么我们依然选择 Go 而不是 Rust？</title><link>https://tonybai.com/2026/06/18/why-choose-go-over-rust-today-in-ai-age/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/18/why-choose-go-over-rust-today-in-ai-age/</guid><description>本文永久链接 – https://tonybai.com/2026/06/18/why-choose-go-over-rust-today-in-ai-age 大家好，我是Tony Bai。 随着 Cursor、Claude Code 和 Copilot 等 AI 编程智能体的爆发，整个技术圈的开发门槛被前所未有地铲平了。 在过去，**Rust** 最大的劝退门槛是它那极其陡峭的路径——生命周期、...</description></item><item><title>DeepMind 亮出王炸：别再手写 Agent Harness 了，AI 已经学会自己写了！</title><link>https://tonybai.com/2026/06/17/deepmind-automation-agent-harness-ai-self-coding/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/17/deepmind-automation-agent-harness-ai-self-coding/</guid><description>本文永久链接 – https://tonybai.com/2026/06/17/deepmind-automation-agent-harness-ai-self-coding 大家好，我是Tony Bai。 过去的几个月，整个 AI 开发圈最火的词，无疑是 **Agent Harness（智能体驾驭系统）**。 从 Claude Code 到 OpenClaw，再到我自己的极客时间专栏，我们所有...</description></item><item><title>为什么说“编译通过，就能运行”？Google 专家 Alice 揭秘 Rust 的工程美学与底层逻辑</title><link>https://tonybai.com/2026/06/16/why-if-it-compiles-it-runs-rust-engineering-aesthetics-and-logic/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/16/why-if-it-compiles-it-runs-rust-engineering-aesthetics-and-logic/</guid><description>本文永久链接 – https://tonybai.com/2026/06/16/why-if-it-compiles-it-runs-rust-engineering-aesthetics-and-logic 大家好，我是Tony Bai。 在软件工程界，有一句流传甚广、近乎玄学的名言：“如果你的 Rust 代码通过了编译，那么它就已经可以正确运行了。” 对于被 Java 的空指针异常（NullP...</description></item><item><title>谷歌 SRE 重磅白皮书：当 AI 自动写出 10 倍代码，谁来阻止系统崩溃？</title><link>https://tonybai.com/2026/06/15/google-ai-in-sre/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/15/google-ai-in-sre/</guid><description>本文永久链接 – https://tonybai.com/2026/06/15/google-ai-in-sre 大家好，我是Tony Bai。 整个软件工程界正在经历一场由生成式 AI 引发的**“效率大爆炸”**。 随着 GitHub Copilot、Claude Code、Codex 以及OpenClaw、Hermes等各类AI Agent 的普及，企业编写代码、构建功能并将其推向生产环境的...</description></item><item><title>别再省 Token 了！硅谷新共识：浪费算力才是唯一捷径</title><link>https://tonybai.com/2026/06/14/stop-saving-tokens-silicon-valley-consensus-waste-compute-shortcut/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/14/stop-saving-tokens-silicon-valley-consensus-waste-compute-shortcut/</guid><description>本文永久链接 – https://tonybai.com/2026/06/14/stop-saving-tokens-silicon-valley-consensus-waste-compute-shortcut 大家好，我是Tony Bai。 你是不是也曾在写 Prompt（提示词）时斤斤计较，为了省下那几元钱的 Token 而字斟句酌？你是不是也曾疯狂收藏各种“保姆级提示词教程”，试图摸索出调...</description></item><item><title>Linux 内核顶级维护者：写了 35 年 C，是 Rust 让我重新找回了编程的乐趣</title><link>https://tonybai.com/2026/06/13/linux-maintainer-greg-kh-switched-to-rust-after-35-years-of-c/</link><pubDate>Sat, 13 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/13/linux-maintainer-greg-kh-switched-to-rust-after-35-years-of-c/</guid><description>本文永久链接 – https://tonybai.com/2026/06/13/linux-maintainer-greg-kh-switched-to-rust-after-35-years-of-c 大家好，我是Tony Bai。 在开源软件的宏大版图中，Linux 内核无疑是那座最古老、最庞大、也最不容有失的钢铁巨塔。它由数千万行 C 语言代码铸就，运行在世界上每一个数据中心、每一台智能手机...</description></item><item><title>拒领上亿、封杀 AI：Zig 之父为什么 10 年不发 1.0？</title><link>https://tonybai.com/2026/06/12/zig-father-refuses-funding-bans-ai-why-no-1-0-in-a-decade/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/12/zig-father-refuses-funding-bans-ai-why-no-1-0-in-a-decade/</guid><description>本文永久链接 – https://tonybai.com/2026/06/12/zig-father-refuses-funding-bans-ai-why-no-1-0-in-a-decade 大家好，我是Tony Bai。 在技术圈，有一门名为 **Zig** 的系统级编程语言，它没有铺天盖地的营销，没有背后财大气粗的金主干爹，甚至它的代码仓库在 2025 年末从 GitHub 直接“硬核跑路...</description></item><item><title>写地道的 Go 语言，是否能让你成为了一个更好的开发者？</title><link>https://tonybai.com/2026/06/11/writing-idiomatic-go-make-you-better/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/11/writing-idiomatic-go-make-you-better/</guid><description>本文永久链接 – https://tonybai.com/2026/06/11/writing-idiomatic-go-make-you-better 大家好，我是Tony Bai。 在技术圈里，Go 语言（Golang）一直扮演着一个特立独行、甚至有些“格格不入”的角色。 如果你去问一个写 Java、Python、TypeScript 或是 C++ 的程序员对 Go 的第一印象，得到的回答大概...</description></item><item><title>C++ 的权力游戏：一部关于妥协、背叛与重生的“史诗神剧”</title><link>https://tonybai.com/2026/06/10/the-story-of-cpp/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/10/the-story-of-cpp/</guid><description>本文永久链接 – https://tonybai.com/2026/06/10/the-story-of-cpp 大家好，我是Tony Bai。 如果将人类现代软件工业比作一部庞大的机器，那么支撑其运转的最核心骨架中，无疑很大一部分由**C++**支撑。从你手中的智能手机操作系统、每天刷的短视频推荐引擎、华尔街每秒百万次的高频交易系统，到驱动大语言模型（LLM）的底层算力矩阵，C++ 几乎无处不在...</description></item><item><title>RSA 将死？Let’s Encrypt 押注 MTCs 迎战后量子时代</title><link>https://tonybai.com/2026/06/10/lets-encrypt-adopts-mtcs-preparing-for-post-quantum-security/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/10/lets-encrypt-adopts-mtcs-preparing-for-post-quantum-security/</guid><description>本文永久链接 – https://tonybai.com/2026/06/10/lets-encrypt-adopts-mtcs-preparing-for-post-quantum-security 大家好，我是Tony Bai。 当你在浏览器地址栏看到那把绿色的小锁，或是敲下 https:// 时，你正在被人类历史上最伟大的密码学基础设施——Web PKI（公钥基础设施）保护着。 长久以来，这...</description></item><item><title>终结十年纠结：Go 新提案允许 Example 支持任意函数签名</title><link>https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures/</guid><description>本文永久链接 – https://tonybai.com/2026/06/09/go-proposal-examples-to-support-arbitrary-function-signatures 大家好，我是Tony Bai。 在 Go 语言的开发日常中，编写 ExampleXxx 示例代码不仅是完善文档的必经之路，更是一门绝佳的“活文档”艺术。 通过在 “\_test.go” 文件中编写...</description></item><item><title>“辛辛苦苦考上985，却发现AI能替代我90%的工作”：今天的高考，我们还在为什么而战？</title><link>https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless/</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless/</guid><description>本文永久链接 – https://tonybai.com/2026/06/07/gaokao-in-the-age-of-ai-is-the-top-tier-degree-worthless 大家好，我是Tony Bai。 今天，2026年6月7日，千万名考生再次走向战场。 考场外，红色的横幅依然高悬，旗袍与鲜花依然簇拥。但在喧嚣之下，空气中却弥漫着一种前所未有的复杂情绪。 数据已经给出了最直观...</description></item><item><title>传奇黑客 Geohot 炮轰 AI Agent：这是软件工程史上代价最昂贵的灾难！</title><link>https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster/</guid><description>本文永久链接 – https://tonybai.com/2026/06/06/geohot-slams-ai-agents-as-the-most-expensive-software-disaster 大家好，我是Tony Bai。 在 AI 辅助编程疯狂席卷全球的今天，几乎每个开发者的双眼都被“效率翻倍”、“一键生成应用”的狂热口号晃得睁不开眼。大厂管理层在积极推进“全员 AI 编码”，创业...</description></item><item><title>别把 Go 写成 Java：毁掉项目从过度架构开始</title><link>https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting/</guid><description>本文永久链接 – https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting 大家好，我是Tony Bai。 前不久，Go 语言社区 Reddit (r/golang) 上爆发了两场激烈的争论。 这两个帖子的主题直击了无数 Go 开发者的灵魂深处： 1. 我们该如何构建一个大型的 Go 模块化单体...</description></item><item><title>AI 时代如何真正掌握一门新技术？这份非主流学习指南建议永久收藏</title><link>https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide/</guid><description>本文永久链接 – https://tonybai.com/2026/06/04/master-new-tech-in-ai-era-counter-intuitive-learning-guide 大家好，我是Tony Bai。 最近，在开发者社区 Reddit 的 Golang（Go语言）板块上，一个求助帖引发了跨越语言和技术栈的集体共鸣。 发帖人是一位刚入行两年的新人，他的帖子大意是： &amp;gt; *...</description></item><item><title>开源维护者的困境</title><link>https://tonybai.com/2026/06/04/the-maintainers-dilemma/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/04/the-maintainers-dilemma/</guid><description>本文永久链接 – https://tonybai.com/2026/06/04/the-maintainers-dilemma 大家好，我是Tony Bai。 开源软件的繁荣建立在一种隐形的“社会契约”之上：贡献者贡献智慧，维护者投入精力审核。然而，当维护者面对成百上千个待处理的拉取请求（PR）而精疲力竭时，这个契约正滑向崩塌。 AI 的介入似乎提供了一线生机，但也带来了一个灵魂拷问：如果代码是 ...</description></item><item><title>Go 生态17年大浪淘沙：2026年最值得引入的10个“神仙级”QoL工具包</title><link>https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026/</guid><description>本文永久链接 – https://tonybai.com/2026/06/03/10-god-tier-go-qol-libraries-to-use-in-2026 大家好，我是Tony Bai。 在软件工程中，有一个词叫 **QoL（Quality of Life，生产体验/开发幸福感）**。 Go语言（Golang）凭借极简的语法、强悍的并发能力和超快的编译速度，成为了现代后端和云原生的绝对...</description></item><item><title>再见样板代码！Go 官方新提案：函数一键转接口</title><link>https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion/</guid><description>本文永久链接 – https://tonybai.com/2026/06/02/no-more-boilerplate-go-proposal-function-to-interface-conversion 大家好，我是Tony Bai。 在 Go 语言日常开发中，有一个设计几乎人人写过，但写多了又让人觉得极其繁琐、甚至有些“脱裤子放屁”的样板代码。 假设你需要一个只读数据的 io.Reader...</description></item><item><title>写代码快 10 倍，不等于研发快 10 倍！Google 揭秘 AI 系统级瓶颈</title><link>https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck/</guid><description>本文永久链接 – https://tonybai.com/2026/06/01/coding-10x-faster-isnt-10x-development-speed-google-ai-bottleneck 大家好，我是Tony Bai。 在过去的两年里，所有的开发者都在经历一场前所未有的“效率狂欢”。 随着大语言模型（LLM）和编码智能体的突飞猛进，各种“一键生成应用”、“10倍速程序员”的...</description></item><item><title>Google I/O 2026：Jeff Dean 携 DeepMind 众神宣告，AI Agent 正在终结“标准化软件”时代</title><link>https://tonybai.com/2026/05/31/google-io-2026-defining-the-agentic-ai-era/</link><pubDate>Sun, 31 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/31/google-io-2026-defining-the-agentic-ai-era/</guid><description>本文永久链接 – https://tonybai.com/2026/05/31/google-io-2026-defining-the-agentic-ai-era 大家好，我是Tony Bai。 在刚刚结束的 Google I/O 2026 第二天的主题论坛上，一场被称为“决定下一个十年科技走向”的圆桌会议拉开了帷幕。 这场会议的阵容堪称奢华： - **Jeff Dean**：谷歌首席科学家，G...</description></item><item><title>AI 优化 1.5ms，手写 0.02ms！Ghostty 作者痛批 AI 编程“平庸陷阱”</title><link>https://tonybai.com/2026/05/30/ghostty-creator-slams-ai-coding-performance-1-5ms-vs-0-02ms/</link><pubDate>Sat, 30 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/30/ghostty-creator-slams-ai-coding-performance-1-5ms-vs-0-02ms/</guid><description>本文永久链接 – https://tonybai.com/2026/05/30/ghostty-creator-slams-ai-coding-performance-1-5ms-vs-0-02ms 大家好，我是Tony Bai。 在开源界，**Mitchell Hashimoto** 这个名字几乎无人不知。作为 HashiCorp 的联合创始人，他一手打造了 Vagrant、Terraform、...</description></item><item><title>Redis 之父吐槽现代前端的复杂性：我们到底是在解决问题，还是在制造问题？</title><link>https://tonybai.com/2026/05/29/redis-creator-slams-modern-frontend-complexity/</link><pubDate>Fri, 29 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/29/redis-creator-slams-modern-frontend-complexity/</guid><description>本文永久链接 – https://tonybai.com/2026/05/29/redis-creator-slams-modern-frontend-complexity 大家好，我是Tony Bai。 曾几何时，Web 开发是一件极其纯粹且美好的事情。 在那个遥远的上世纪 90 年代末，你只需要写几个简单的 .html 文件，撒上一点 .css，再用几行 JavaScript 操纵一下表单，就...</description></item><item><title>无痛消灭技术债：Google I/O 2026 开启 Go 自动重构时代</title><link>https://tonybai.com/2026/05/29/google-io-2026-automated-go-refactoring-eliminating-technical-debt/</link><pubDate>Fri, 29 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/29/google-io-2026-automated-go-refactoring-eliminating-technical-debt/</guid><description>本文永久链接 – https://tonybai.com/2026/05/29/google-io-2026-automated-go-refactoring-eliminating-technical-debt 大家好，我是Tony Bai。 在软件开发的世界里，一直存在着一个令人绝望的“二选一”魔咒。 你要么选择 Python 或 JavaScript：它们写起来如丝般顺滑，能让你在周五下午迅...</description></item><item><title>省下 10% CPU！Uber 揭秘 Go 栈扩容的隐秘代价</title><link>https://tonybai.com/2026/05/28/uber-reveals-hidden-cost-of-go-stack-growth-10-percent-cpu-savings/</link><pubDate>Thu, 28 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/28/uber-reveals-hidden-cost-of-go-stack-growth-10-percent-cpu-savings/</guid><description>本文永久链接 – https://tonybai.com/2026/05/28/uber-reveals-hidden-cost-of-go-stack-growth-10-percent-cpu-savings 大家好，我是Tony Bai。 在顶级互联网巨头的底层架构中，性能优化绝不仅仅是写两段优雅的代码，而是一场“刀尖舔血”的硬核战争。 试想一下，如果你的公司拥有超过 **200 万个 CP...</description></item><item><title>从 Go 迁移到 Rust</title><link>https://tonybai.com/2026/05/27/migrate-go-to-rust/</link><pubDate>Wed, 27 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/27/migrate-go-to-rust/</guid><description>本文永久链接 – https://tonybai.com/2026/05/27/migrate-go-to-rust 大家好，我是Tony Bai。 在现代后端系统编程领域，Go 和 Rust 无疑是最耀眼的两大双子星。它们都拥有静态类型、编译型、单二进制文件分发等优异特性。然而，这两门语言在底层的设计哲学、运行时权衡以及开发者体验上，走向了截然不同的方向。 Matthias Endler（Cor...</description></item><item><title>悄悄用 Go 重写 AI 基础设施：NVIDIA 的 GPU 云平台为何选择 Go？</title><link>https://tonybai.com/2026/05/26/why-nvidia-chose-go-to-rewrite-their-ai-infrastructure/</link><pubDate>Tue, 26 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/26/why-nvidia-chose-go-to-rewrite-their-ai-infrastructure/</guid><description>本文永久链接 – https://tonybai.com/2026/05/26/why-nvidia-chose-go-to-rewrite-their-ai-infrastructure &amp;gt; 当大家都在谈论 CUDA、Python 和 AI 框架时，NVIDIA 的工程团队正在悄悄用 Go 构建支撑整个 AI 云平台的底层基础设施。从 GPU 函数平台 NVCF，到 AI 集群运行时 AICR，...</description></item><item><title>Shopify 23,000 名工程师背后的 Claude Code 配置方案（你可以直接复刻的完整配置）</title><link>https://tonybai.com/2026/05/24/shopify-claude-code-configuration-for-23000-engineers/</link><pubDate>Sun, 24 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/24/shopify-claude-code-configuration-for-23000-engineers/</guid><description>本文永久链接 – https://tonybai.com/2026/05/24/shopify-claude-code-configuration-for-23000-engineers 大家好，我是Tony Bai。 这篇来自 X (Twitter) 的深度好文剖析了 Shopify 如何通过 Claude Code 实现工程效率的飞跃。文章不仅分享了其 23,000 名工程师背后的核心配置逻辑...</description></item><item><title>Google 开源 AX 与 Agent Substrate：构建以 Agent 为核心的云原生计算底座</title><link>https://tonybai.com/2026/05/23/google-open-sources-ax-and-agent-substrate-agent-centric-cloud-native-foundation/</link><pubDate>Sat, 23 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/23/google-open-sources-ax-and-agent-substrate-agent-centric-cloud-native-foundation/</guid><description>本文永久链接 – https://tonybai.com/2026/05/23/google-open-sources-ax-and-agent-substrate-agent-centric-cloud-native-foundation 大家好，我是Tony Bai。 随着大语言模型（LLM）与应用场景的深度融合，AI 正在从单纯的“聊天对话框”快速演进为具备长期运行、自主工具调用和复杂任务编...</description></item><item><title>十年难题终获突破：揭秘 Go 1.27 接口逃逸分析优化</title><link>https://tonybai.com/2026/05/22/go-1-27-interface-escape-analysis-optimization-breakthrough/</link><pubDate>Fri, 22 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/22/go-1-27-interface-escape-analysis-optimization-breakthrough/</guid><description>本文永久链接 – https://tonybai.com/2026/05/22/go-1-27-interface-escape-analysis-optimization-breakthrough 大家好，我是Tony Bai。 在日常的 Go 语言开发中，有这样一段极其普通、普通到闭着眼睛都能敲出来的代码： ``` val := 1000 fmt.Sprintf(&amp;#34;Result: %d&amp;#34;, v...</description></item><item><title>大洗牌！Google 内部确认：Go 正取代 C++，成为 AI Agent 时代的“通用语言”</title><link>https://tonybai.com/2026/05/21/go-is-the-new-lingua-franca-for-ai-agents-at-google/</link><pubDate>Thu, 21 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/21/go-is-the-new-lingua-franca-for-ai-agents-at-google/</guid><description>本文永久链接 – https://tonybai.com/2026/05/21/go-is-the-new-lingua-franca-for-ai-agents-at-google 大家好，我是Tony Bai。 在过去的两年里，只要一提到 AI 开发，99% 的人脑海中弹出的第一个词绝对是：**Python**。而如果是涉及到大模型底层的高性能推理与算力压榨，大家想到的必然是 **C++** ...</description></item><item><title>AI 编码胜率榜：Go 与 Rust 完胜 C++</title><link>https://tonybai.com/2026/05/20/ai-coding-win-rate-rankings-go-and-rust-vs-cpp/</link><pubDate>Wed, 20 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/20/ai-coding-win-rate-rankings-go-and-rust-vs-cpp/</guid><description>本文永久链接 – https://tonybai.com/2026/05/20/ai-coding-win-rate-rankings-go-and-rust-vs-cpp 大家好，我是Tony Bai。 过去两年，程序员群体经历了一场前所未有的“职业身份危机”。 随着 GPT、Claude、Gemini 等模型的发布与能力更迭，各种“AI 几秒钟写出小游戏”、“AI 自动化修复 Bug”的新闻充...</description></item><item><title>代码可以让 AI 写，但设计得由你做：重塑工程师的“算法直觉”</title><link>https://tonybai.com/2026/05/19/ai-era-software-engineer-algorithm-map/</link><pubDate>Tue, 19 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/19/ai-era-software-engineer-algorithm-map/</guid><description>本文永久链接 – https://tonybai.com/2026/05/19/ai-era-software-engineer-algorithm-map 大家好，我是Tony Bai。 “帮我写一个限流器。” 当你把这行字敲进 Claude、Gemini 或ChatGPT 的对话框或CLI形式的命令行时，几秒钟后，屏幕上会出现一段看似完美的 Go 代码。它可能使用了 Token Bucket ...</description></item><item><title>别神话 Rust 重写了：搞定1%热路径，Go 性能照样起飞</title><link>https://tonybai.com/2026/05/18/go-performance-optimization-over-rust-rewrites/</link><pubDate>Mon, 18 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/18/go-performance-optimization-over-rust-rewrites/</guid><description>本文永久链接 – https://tonybai.com/2026/05/18/go-performance-optimization-over-rust-rewrites 大家好，我是Tony Bai。 近年来，如果你常年混迹于国内外各大技术社区，你一定会感受到一种近乎狂热的“政治正确”：**带垃圾回收（GC）的语言都有原罪，万物皆可（且应该）用 Rust 重写。** 从底层基础设施到上层业务逻...</description></item><item><title>如何在大型代码库中运用 Claude Code：最佳实践及入门指南</title><link>https://tonybai.com/2026/05/17/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start/</link><pubDate>Sun, 17 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/17/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start/</guid><description>本文永久链接 – https://tonybai.com/2026/05/17/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start 大家好，我是Tony Bai。 在 AI 编码工具普及的今天，我们往往容易陷入一种认知误区：认为只需接入最顶尖的模型，生产力便会随之爆发。然而，当我们将 Claude C...</description></item><item><title>写了 10 年 Java/TS，Go 语言终于治好了我的“过度设计”绝症</title><link>https://tonybai.com/2026/05/16/go-cured-my-over-engineering-addiction-after-java-ts/</link><pubDate>Sat, 16 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/16/go-cured-my-over-engineering-addiction-after-java-ts/</guid><description>本文永久链接 – https://tonybai.com/2026/05/16/go-cured-my-over-engineering-addiction-after-java-ts 大家好，我是Tony Bai。 在软件工程的圈子里，有一种病，几乎所有写过几年 Java 或 TypeScript 的程序员都得过，而且往往病得不轻。 这种病叫：**“过度设计综合征（Over-engineerin...</description></item><item><title>AI 时代，软件大师们为什么都倒戈向 Go 和 Rust 了？</title><link>https://tonybai.com/2026/05/14/uncle-bob-esr-on-why-we-are-turning-to-go-and-rust-in-the-ai-era/</link><pubDate>Thu, 14 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/14/uncle-bob-esr-on-why-we-are-turning-to-go-and-rust-in-the-ai-era/</guid><description>本文永久链接 – https://tonybai.com/2026/05/14/uncle-bob-esr-on-why-we-are-turning-to-go-and-rust-in-the-ai-era 大家好，我是Tony Bai。 在软件工程的浩瀚星河中，有两位堪称“活化石”级别的宗师： 一位是 **Eric S. Raymond (ESR)**，开源运动的先驱，那本被誉为开源圣经的《大...</description></item><item><title>别再瞎写 go.mod 了！一行 go 1.xx，竟藏着 7 个足以颠覆你认知的“秘密开关”</title><link>https://tonybai.com/2026/05/13/go-mod-hidden-features-7-secret-switches-in-go-version/</link><pubDate>Wed, 13 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/13/go-mod-hidden-features-7-secret-switches-in-go-version/</guid><description>本文永久链接 – https://tonybai.com/2026/05/13/go-mod-hidden-features-7-secret-switches-in-go-version 大家好，我是Tony Bai。 在这个“CV 工程师(复制粘贴工程师)”盛行的时代，很多 Go 开发者在新建项目时，不会使用go mod init来初始化一个模块，而是会熟练地从别的 go.mod 文件里，复制...</description></item><item><title>谁说 Rust 在中国火了？扒开 2025 全年数据，我看到了令人尴尬的真相</title><link>https://tonybai.com/2026/05/12/the-embarrassing-truth-about-rust-adoption-in-china/</link><pubDate>Tue, 12 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/12/the-embarrassing-truth-about-rust-adoption-in-china/</guid><description>本文永久链接 – https://tonybai.com/2026/05/12/the-embarrassing-truth-about-rust-adoption-in-china 大家好，我是Tony Bai。 如果只看国内的公众号和社交媒体，你可能会觉得 Rust 在中国IT技术圈已经很火了：大厂在重构核心链路和重写数据工程的基础设施、创业者在搞 Web 3.0和AI 原生开发、甚至连刚毕业...</description></item><item><title>“用 Go 打天下，用 Rust 救火”：这才是 2026 年后端架构的唯一正解</title><link>https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy/</link><pubDate>Mon, 11 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy/</guid><description>本文永久链接 – https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy 大家好，我是Tony Bai。 如果你经常逛各大技术社区，你一定会发现一个永远充满火药味的话题：**Go 和 Rust，到底谁才是未来的后端霸主？** 两派的支持者常常吵得不可开交。Go 开发者嘲笑 Rust 编译器像个...</description></item><item><title>对话 Uber 前 CTO：我如何用 5000 个微服务驯服这头失控的巨兽</title><link>https://tonybai.com/2026/05/10/scaling-uber-with-thuan-pham/</link><pubDate>Sun, 10 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/10/scaling-uber-with-thuan-pham/</guid><description>本文永久链接 – https://tonybai.com/2026/05/10/scaling-uber-with-thuan-pham 大家好，我是Tony Bai。 在硅谷的黄金时代，曾有一家公司以一种近乎“暴力”的美学，重新定义了增长的速度。它的名字叫 Uber。 在最癫狂的岁月里，它以“周”为单位攻占新的城市，用海量的资本和补贴点燃市场，其业务增长曲线陡峭得如同悬崖峭壁。 但在这场增长的狂...</description></item><item><title>Anthropic 工程师发文：别用 Markdown 了，HTML 才是 AI 的终极语言！</title><link>https://tonybai.com/2026/05/09/anthropic-engineer-say-html-is-the-ultimate-language-for-ai/</link><pubDate>Sat, 09 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/09/anthropic-engineer-say-html-is-the-ultimate-language-for-ai/</guid><description>本文永久链接 – https://tonybai.com/2026/05/09/anthropic-engineer-say-html-is-the-ultimate-language-for-ai 大家好，我是Tony Bai。 在这个大模型（LLM）席卷一切的时代，如果说有什么东西是全体程序员的“共识”，那绝对是 Markdown。 无论是写 Prompt，定义 Agent Skill，还是阅...</description></item><item><title>火爆外网的 Go 开源神器 CLI Printing Press：一键生成 Agent 专属 CLI 工具</title><link>https://tonybai.com/2026/05/09/cli-printing-press-intro/</link><pubDate>Sat, 09 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/09/cli-printing-press-intro/</guid><description>本文永久链接 – https://tonybai.com/2026/05/09/cli-printing-press-intro 大家好，我是Tony Bai。 &amp;gt; 近日，一个名叫 cli-printing-press 的开源项目冲上了 X.com 热搜。它用 Go 写成，解决的是 AI Agent 时代最隐秘、也最致命的痛点——工具不够用，更不好用。 先说一个反常识的故事 Discord 有 3...</description></item><item><title>Bun 创始人带头“叛逃”：放弃 Zig，用 AI 把项目重写成 Rust？</title><link>https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite/</link><pubDate>Fri, 08 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite/</guid><description>本文永久链接 – https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite 大家好，我是Tony Bai。 在过去的两年里，Bun 以其闪电般的速度，成为了前端世界挑战 Node.js 霸权的“重量级选手”。 而它成功的秘诀之一，就是其创始人 Jarred Sumner 极其激进、甚至有些“偏执”的技术选...</description></item><item><title>AWS 大神发文炮轰：Go 的并发就是个“笑话”，JVM 的方案要更优越</title><link>https://tonybai.com/2026/05/07/aws-guru-slams-go-concurrency-as-a-joke-vs-jvm/</link><pubDate>Thu, 07 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/07/aws-guru-slams-go-concurrency-as-a-joke-vs-jvm/</guid><description>本文永久链接 – https://tonybai.com/2026/05/07/aws-guru-slams-go-concurrency-as-a-joke-vs-jvm 大家好，我是Tony Bai。 过去十年，如果要在后端技术圈选出一个“金字招牌”，那无疑是 **Go 语言的并发**。 凭借其极简的 go 关键字和优雅的 channel，Go 将并发编程的门槛从“博士级”拉到了“入门级”。在...</description></item><item><title>Robert Griesemer 亲述：只解决 90% 问题的“箭头函数”该长什么样？</title><link>https://tonybai.com/2026/05/06/robert-griesemer-on-go-arrow-functions/</link><pubDate>Wed, 06 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/06/robert-griesemer-on-go-arrow-functions/</guid><description>本文永久链接 – https://tonybai.com/2026/05/06/robert-griesemer-on-go-arrow-functions 大家好，我是Tony Bai。 在 Go 语言的演进史上，很少有一个 Issue 能像 #21498 这样，跨越 9 年时光，累积近千条评论，却依然让官方核心团队如履薄冰。 这个 Issue 的目标很单纯：**为 Go 提供一种更简洁的匿名函...</description></item><item><title>“AI 让每个人都成了开发者”，就像“相机让每个人都成了摄影师”</title><link>https://tonybai.com/2026/05/05/ai-makes-everyone-a-developer-like-cameras-for-photographers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/05/ai-makes-everyone-a-developer-like-cameras-for-photographers/</guid><description>本文永久链接 – https://tonybai.com/2026/05/05/ai-makes-everyone-a-developer-like-cameras-for-photographers 大家好，我是Tony Bai。 最近，在技术圈里流传着一个“非主流观点（Unpopular Opinion）”： &amp;gt; **“‘AI 让每个人都成了开发者’，这句话是真的。就像当年‘相机的发明，让每个...</description></item><item><title>AI 正在把我们推向“双输”深渊：顶级论文揭示“AI 裁员陷阱”</title><link>https://tonybai.com/2026/05/04/the-ai-layoff-trap/</link><pubDate>Mon, 04 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/04/the-ai-layoff-trap/</guid><description>本文永久链接 – https://tonybai.com/2026/05/04/the-ai-layoff-trap 大家好，我是Tony Bai。 过去的一年，AI 带来的“裁员恐慌”几乎席卷了整个科技行业。 今年 2 月，Jack Dorsey 的 Block 公司裁掉了近一半的员工，他直言不讳：“因为 AI 让很多岗位变得没必要了。” Salesforce 用 AI 替换了 4000 名客服...</description></item><item><title>“AI 正在用垃圾代码摧毁一切！”：Flask 之父对话 Pi 作者，揭开 AI 编程的残酷真相</title><link>https://tonybai.com/2026/05/03/flask-creator-pi-author-on-ai-coding-the-cruel-truth/</link><pubDate>Sun, 03 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/03/flask-creator-pi-author-on-ai-coding-the-cruel-truth/</guid><description>本文永久链接 – https://tonybai.com/2026/05/03/flask-creator-pi-author-on-ai-coding-the-cruel-truth 大家好，我是Tony Bai。 过去的一年，我们见证了 AI 工具从“玩具”到“神器”的进化。从 Copilot 到 Claude Code，再到OpenClaw和Hermes等，整个技术圈都沉浸在一种“效率无限提...</description></item><item><title>从“Vibe-Coding”到“Agentic Engineering”：Andrej Karpathy 的 AI 时代程序员生存法则</title><link>https://tonybai.com/2026/05/02/from-vibe-coding-to-agentic-engineering-karpathy-survival-guide/</link><pubDate>Sat, 02 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/02/from-vibe-coding-to-agentic-engineering-karpathy-survival-guide/</guid><description>本文永久链接 – https://tonybai.com/2026/05/02/from-vibe-coding-to-agentic-engineering-karpathy-survival-guide 大家好，我是Tony Bai。 过去的一年，我们中的许多人，都经历了一种全新的、令人上瘾的编码体验，它被前特斯拉 AI 总监 Andrej Karpathy 戏称为 **“Vibe-Codin...</description></item><item><title>开源社区“内战”爆发：Bun 创始人预言“未来将禁止人类贡献”，硅谷大佬纷纷站队！</title><link>https://tonybai.com/2026/05/01/open-source-civil-war-bun-founder-predicts-ban-on-human-contributions/</link><pubDate>Fri, 01 May 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/05/01/open-source-civil-war-bun-founder-predicts-ban-on-human-contributions/</guid><description>本文永久链接 – https://tonybai.com/2026/05/01/open-source-civil-war-bun-founder-predicts-ban-on-human-contributions 大家好，我是Tony Bai。 过去的一年，AI 编程的浪潮席卷了整个技术圈。但在这片繁荣之下，一场关于**“开源精神与 AI 伦理”**的深刻裂痕，正在悄然扩大。 就在前几天，这...</description></item><item><title>Ghostty 之父带头“出走”GitHub！官方 CTO 紧急道歉，并揭秘正在使用 Go 语言救火</title><link>https://tonybai.com/2026/04/30/ghostty-creator-leads-github-exodus-cto-apology-go-fix/</link><pubDate>Thu, 30 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/30/ghostty-creator-leads-github-exodus-cto-apology-go-fix/</guid><description>本文永久链接 – https://tonybai.com/2026/04/30/ghostty-creator-leads-github-exodus-cto-apology-go-fix 大家好，我是Tony Bai。 在程序员的江湖里，GitHub 从来不仅仅是一个代码托管平台。它是开源精神的麦加，是数千万开发者的“赛博故乡”，是这个行业赖以运转的、最坚实的“基础设施”。 但就在近几个月，这座...</description></item><item><title>Go 1.27 将默认开启 SIMD for amd64，可移植 SIMD 包提案出炉</title><link>https://tonybai.com/2026/04/29/go-1-27-default-simd-for-amd64-portable-simd-proposal/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/29/go-1-27-default-simd-for-amd64-portable-simd-proposal/</guid><description>本文永久链接 – https://tonybai.com/2026/04/29/go-1-27-default-simd-for-amd64-portable-simd-proposal 大家好，我是Tony Bai。 过去十年，Go 语言以其惊人的简洁和强大的并发能力，席卷了整个云原生领域。但在这片繁荣之下，一个尴尬的“阿喀琉斯之踵”，始终困扰着所有追求极致性能的 Gopher： **Go 语言...</description></item><item><title>Go 语言“内战”迎来终局？Go 圣经作者亲自下场，为“三元运算符”发起折中提案！</title><link>https://tonybai.com/2026/04/28/go-conditional-expressions-propsal/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/28/go-conditional-expressions-propsal/</guid><description>本文永久链接 – https://tonybai.com/2026/04/28/go-conditional-expressions-propsal 大家好，我是Tony Bai。 在 Go 语言的江湖里，有一个话题，像幽灵一样，每隔几个月就会重燃战火。它引发的争论之激烈、持续时间之长，甚至超过了当初的“泛型”和“错误处理”。 它就是——**三元条件运算符（Ternary Conditional ...</description></item><item><title>“我们想用 Rust 重写的次数是：零”：云平台 Render 靠“无聊”的 Go 撑起了千亿流量</title><link>https://tonybai.com/2026/04/27/render-why-we-wont-rewrite-in-rust-the-power-of-boring-go/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/27/render-why-we-wont-rewrite-in-rust-the-power-of-boring-go/</guid><description>本文永久链接 – https://tonybai.com/2026/04/27/render-why-we-wont-rewrite-in-rust-the-power-of-boring-go 大家好，我是Tony Bai。 在技术圈的鄙视链里，Go 和 Rust 这对“欢喜冤家”的战争，似乎从未停歇。 一方是追求极致简洁、被誉为“云原生时代的 C 语言”的 Go；另一方则是以内存安全、性能屠榜...</description></item><item><title>对话 Martin Kleppmann：DDIA 第二版揭秘，以及 AI 将如何颠覆分布式系统</title><link>https://tonybai.com/2026/04/26/interview-martin-kleppmann-ddia-2nd-edition-ai-distributed-systems/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/26/interview-martin-kleppmann-ddia-2nd-edition-ai-distributed-systems/</guid><description>本文永久链接 – https://tonybai.com/2026/04/26/interview-martin-kleppmann-ddia-2nd-edition-ai-distributed-systems 大家好，我是Tony Bai。 在后端架构师的世界里，有一本书被公认为“圣经”级别的存在，那就是 Martin Kleppmann 的**《数据密集型应用设计》（Designing Da...</description></item><item><title>为什么人人爱 Rust，但 RedMonk 榜单却给它泼了一盆冷水？</title><link>https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check/</guid><description>本文永久链接 – https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check 大家好，我是Tony Bai。 在过去几年的技术圈，Rust 是当之无愧的“流量之王”。 它连续多年在 Stack Overflow 开发者调研中蝉联“最受喜爱的语言”；它是 Linux 内核 30 年来引入的唯一非 C ...</description></item><item><title>Go 代码设计的“第一天原则”：一份能让你少走五年弯路的实战模式清单</title><link>https://tonybai.com/2026/04/24/go-code-design-day-one-principle-practical-patterns-list/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/24/go-code-design-day-one-principle-practical-patterns-list/</guid><description>本文永久链接 – https://tonybai.com/2026/04/24/go-code-design-day-one-principle-practical-patterns-list 大家好，我是Tony Bai。 &amp;gt; 世界读书日送福利活动火热进行中，点击这里留言参与，赢取属于你的幸运！ 每一个 Go 开发者，大概都经历过这样的心路历程： 项目启动初期，为了追求“快”，我们怎么方便怎么来...</description></item><item><title>HashiCorp 创始人亲口“认错”：AI 让我重新爱上了 Go (文末福利)</title><link>https://tonybai.com/2026/04/23/hashicorp-founder-admits-go-is-alive-thanks-to-ai/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/23/hashicorp-founder-admits-go-is-alive-thanks-to-ai/</guid><description>本文永久链接 – https://tonybai.com/2026/04/23/hashicorp-founder-admits-go-is-alive-thanks-to-ai 大家好，我是Tony Bai。 &amp;gt; 今天是世界读书日，在同款公众号文章的文末我将送出两个价值 99 元的《从 0 开始构建 Agent Harness》专栏的免费兑换码，欢迎大家点击这里积极留言参与！ 在技术圈的江湖里，...</description></item><item><title>聊聊为什么我要花这么大精力，带大家手写 Agent Harness？</title><link>https://tonybai.com/2026/04/21/why-we-are-building-agent-harness-from-scratch/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/21/why-we-are-building-agent-harness-from-scratch/</guid><description>本文永久链接 – https://tonybai.com/2026/04/21/why-we-are-building-agent-harness-from-scratch 大家好，我是Tony Bai。 今天想和大家分享一个好消息：我筹备已久的极客时间专栏 **《从0 开始构建 Agent Harness》** 于昨日(2026.4.20)正式上架了。 在这个各种 AI 应用框架满天飞、“几行 ...</description></item><item><title>“我把公司卖了，却感觉一无所有”：OpenClaw 之父 TED 亲述如何靠 AI 重获新生</title><link>https://tonybai.com/2026/04/20/openclaw-father-ted-talk/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/20/openclaw-father-ted-talk/</guid><description>本文永久链接 – https://tonybai.com/2026/04/20/openclaw-father-ted-talk 大家好，我是Tony Bai。 &amp;gt; “我曾创立过一家公司，倾注了十年的心血，没有拿一分钱风投。然后，我把它卖了，实现了所有人都羡慕的‘财富自由’。**但我却感觉一无所有。**” &amp;gt; &amp;gt; &amp;gt; “在长达三年的时间里，我尝试了心理治疗，我换了两个国家生活，但什么用都没有。我每...</description></item><item><title>薄驾驭，厚技能：YC 掌门人揭秘拉开 1000 倍效率差距的 AI 工程化心法</title><link>https://tonybai.com/2026/04/19/thin-harness-fat-skills/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/19/thin-harness-fat-skills/</guid><description>本文永久链接 – https://tonybai.com/2026/04/19/thin-harness-fat-skills 大家好，我是Tony Bai。 在过去一年，你有没有想过，为什么同样用着 GPT 或 Claude 等大模型以及Claude Code这样的Coding Agent，有的人生产力只提升了 2 倍，而有的人却能爆发出 **100倍、甚至 1000倍** 的惊人能量？ 就在前...</description></item><item><title>从“开源英雄”到“社区公敌”，Ollama 到底做错了什么？</title><link>https://tonybai.com/2026/04/18/ollama-from-open-source-hero-to-community-enemy/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/18/ollama-from-open-source-hero-to-community-enemy/</guid><description>本文永久链接 – https://tonybai.com/2026/04/18/ollama-from-open-source-hero-to-community-enemy 大家好，我是Tony Bai。 两年前，在本地大模型的蛮荒时代，Ollama 曾如一道神光，照亮了无数普通开发者的探索之路。 凭借那句魔咒般的 ollama run llama3，它以一种近乎“降维打击”的优雅，将普通人与本...</description></item><item><title>GPU 计算的起源</title><link>https://tonybai.com/2026/04/17/the-origins-of-gpu-computing/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/17/the-origins-of-gpu-computing/</guid><description>本文永久链接 – https://tonybai.com/2026/04/17/the-origins-of-gpu-computing 大家好，我是Tony Bai。 在今天的人工智能时代，GPU 已成为数据中心的核心算力引擎，但它的崛起并非一夜之间的奇迹。ACM通讯文章《The Origins of GPU Computing》回溯了 GPU 计算的三十年发展史，揭示了从并行计算、图形系统到流...</description></item><item><title>Rust 还没进前十，TIOBE 就开始唱衰了？</title><link>https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype/</guid><description>本文永久链接 – https://tonybai.com/2026/04/17/tiobe-ranking-and-the-decline-of-rust-hype 大家好，我是Tony Bai。 过去几年，技术圈最热门的“猜谜游戏”之一，就是预测 Rust 什么时候能杀入 TIOBE 排行榜的前十。 这门被誉为“天选之子”的语言，连续多年霸榜 Stack Overflow“最受喜爱”的宝座，被微...</description></item><item><title>为什么说 go 语句是新时代的 goto？四大法则拯救失控 goroutine</title><link>https://tonybai.com/2026/04/16/structured-concurrency-in-go-research-oriented-perspective/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/16/structured-concurrency-in-go-research-oriented-perspective/</guid><description>本文永久链接 – https://tonybai.com/2026/04/16/structured-concurrency-in-go-research-oriented-perspective 大家好，我是Tony Bai。 Go 语言的 go 关键字是并发编程史上的一次民主化革命，它让并发变得前所未有的廉价和简单。只需在一个函数调用前加上 go，我们就拥有了一个并发执行的任务。 这种语法是如...</description></item><item><title>C++ 社区内部大讨论：新特性到底是“生产力革命”，还是“叠加的复杂性”？</title><link>https://tonybai.com/2026/04/15/cpp-community-debate-productivity-revolution-vs-complexity/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/15/cpp-community-debate-productivity-revolution-vs-complexity/</guid><description>本文永久链接 – https://tonybai.com/2026/04/15/cpp-community-debate-productivity-revolution-vs-complexity 大家好，我是Tony Bai。 如果你把编程语言比作工具，Go 是一把极简的手术刀，精准且克制；Rust 是一套带智能传感器的外骨骼装甲，严苛且安全。 而 C++ 呢？它更像是一把在过去四十年里不断被加...</description></item><item><title>别再无脑 go func() 了！Go 资深布道师 Dave Cheney 的 Goroutine 管理哲学</title><link>https://tonybai.com/2026/04/13/dave-cheney-goroutine-management-philosophy/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/13/dave-cheney-goroutine-management-philosophy/</guid><description>本文永久链接 – https://tonybai.com/2026/04/13/dave-cheney-goroutine-management-philosophy 大家好，我是Tony Bai。 在 Go 语言的江湖里，go func() 就像一把绝世好剑。它轻灵、锋利，只需几个字符，就能让你瞬间拥有“分身术”，并发地处理海量任务。Go 团队曾自豪地告诉我们：Goroutine 很廉价，你可以...</description></item><item><title>AI 时代，敏捷宣言已死？听听 Martin Fowler 和 Kent Beck 怎么说</title><link>https://tonybai.com/2026/04/12/agile-manifesto-dead-in-ai-era-martin-fowler-kent-beck/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/12/agile-manifesto-dead-in-ai-era-martin-fowler-kent-beck/</guid><description>本文永久链接 – https://tonybai.com/2026/04/12/agile-manifesto-dead-in-ai-era-martin-fowler-kent-beck 大家好，我是Tony Bai。 25 年前，在美国犹他州的一间滑雪小屋里，17 位当时最顶尖的软件开发者聚集一堂，共同签署了一份将彻底改变未来二十年软件工程形态的纲领——《敏捷软件开发宣言》。 在这 17 位“...</description></item><item><title>Go Command 工作组成立：这几个用了十年的命令可能要被废！</title><link>https://tonybai.com/2026/04/11/go-command-working-group-formed-legacy-commands-deprecated/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/11/go-command-working-group-formed-legacy-commands-deprecated/</guid><description>本文永久链接 – https://tonybai.com/2026/04/11/go-command-working-group-formed-legacy-commands-deprecated 大家好，我是Tony Bai。 在这个技术浪潮汹涌的时代，Go 语言以其惊人的稳定性和向后兼容性著称。但稳定，并不代表停滞。 就在最近，Go 核心团队内部悄然发生了一件大事：他们正式成立了一个全新的 “...</description></item><item><title>Ruby on Rails 之父最新访谈：AI 正在推高顶尖程序员的身价</title><link>https://tonybai.com/2026/04/10/rails-father-dhh-on-ai-and-programmer-value/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/10/rails-father-dhh-on-ai-and-programmer-value/</guid><description>本文永久链接 – https://tonybai.com/2026/04/10/rails-father-dhh-on-ai-and-programmer-value 大家好，我是Tony Bai。 在这个由 AI 主导的、充满不确定性的 2026 年，整个软件行业似乎都被一种集体性的焦虑所笼罩。我们每天都在讨论：当 AI 能在一分钟内写完我们一周的代码时，我们这些“人类程序员”的价值还剩下多少？...</description></item><item><title>别搞“小而美”了！Rust 开发者请愿：求求标准库学学 Go 吧</title><link>https://tonybai.com/2026/04/09/stop-being-small-and-beautiful-rust-petition-to-learn-from-go/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/09/stop-being-small-and-beautiful-rust-petition-to-learn-from-go/</guid><description>本文永久链接 – https://tonybai.com/2026/04/09/stop-being-small-and-beautiful-rust-petition-to-learn-from-go 大家好，我是Tony Bai。 如果你之前经常听 Go 社区最火的播客 GoTime(很遗憾，该播客2024年末因平台原因停播了)，你一定会熟悉每期节目最后的那个经典环节——“Unpopular ...</description></item><item><title>倒计时 33 个月？Go 前安全负责人：量子计算机将“摧毁”互联网</title><link>https://tonybai.com/2026/04/08/perspective-on-quantum-computing-timeline/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/08/perspective-on-quantum-computing-timeline/</guid><description>本文永久链接 – https://tonybai.com/2026/04/08/perspective-on-quantum-computing-timelines 大家好，我是Tony Bai。 过去三十年，我们一直活在一个笑话里：**“能够破解 RSA 加密的量子计算机，永远在十年之后。”** 作为一名软件工程师，我曾和你们中的大多数人一样，对所谓的“量子末日（Q-Day）”嗤之以鼻。我们觉得...</description></item><item><title>从 1960 到 2026：一文看透 Java、Go、Python 垃圾回收器的原理与演进</title><link>https://tonybai.com/2026/04/07/garbage-collectors-deep-dive/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/07/garbage-collectors-deep-dive/</guid><description>本文永久链接 – https://tonybai.com/2026/04/07/garbage-collectors-deep-dive 大家好，我是Tony Bai。 为什么 Java 的 G1GC 需要设置停顿目标？Go 的混合写屏障是如何消除栈重扫的？Python 又是如何解决引用计数无法处理的循环引用？ 垃圾回收（GC）不仅是语言运行时的核心，更是理解高性能系统绕不开的坎。 本文翻译自Sh...</description></item><item><title>AI 编程时代，我挖出了一本 1999 年的“删库跑路”指南</title><link>https://tonybai.com/2026/04/06/how-to-write-unmaintainable-code/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/06/how-to-write-unmaintainable-code/</guid><description>本文永久链接 – https://tonybai.com/2026/04/06/how-to-write-unmaintainable-code 大家好，我是Tony Bai。 在这个由 Claude、GPT、Gemini等大模型定义的 2026 年，我们似乎已经习惯了 AI 那种近乎“洁癖”的编码风格：优雅的接口设计、滴水不漏的错误处理、以及永远对齐的工整格式。 AI 正在用它那冰冷的、毫无感情...</description></item><item><title>当AI 榨干了编程所有的乐趣：我不再是程序员，而是“Claude Code”的项目经理</title><link>https://tonybai.com/2026/04/04/the-death-of-coding-joy-in-the-age-of-ai-agents/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/04/the-death-of-coding-joy-in-the-age-of-ai-agents/</guid><description>本文永久链接 – https://tonybai.com/2026/04/04/the-death-of-coding-joy-in-the-age-of-ai-agents 大家好，我是Tony Bai。 过去的两年，我们见证了 AI 编程工具从“玩具”到“神器”的进化。从 Copilot 的代码补全，到 Claude Code 的“一句话建站”，再到各种Coding Agent 的“自主开发”...</description></item><item><title>REST 已老，AI 时代的智能体需要怎样的 API？</title><link>https://tonybai.com/2026/04/03/agentic-api-in-action/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/03/agentic-api-in-action/</guid><description>本文永久链接 – https://tonybai.com/2026/04/03/agentic-api-in-action 大家好，我是Tony Bai。 在过去的十几年里，如果你问任何一位后端工程师：“我们应该如何设计 API？”得到的答案几乎是统一的：**RESTful**。 我们将世界抽象为一个个“资源（Resources）”，用名词来命名 URI（比如 /users, /orders），用...</description></item><item><title>2026 编程语言“饱和度”榜单出炉：JavaScript/Python 已“烂大街”，Go/Rust 成最大赢家？</title><link>https://tonybai.com/2026/04/02/2026-programming-language-saturation-rankings-go-rust-winners/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/02/2026-programming-language-saturation-rankings-go-rust-winners/</guid><description>本文永久链接 – https://tonybai.com/2026/04/02/2026-programming-language-saturation-rankings-go-rust-winners 大家好，我是Tony Bai。 在这个技术浪潮汹涌、AI 随时可能掀翻牌桌的时代，每一个程序员心中都悬着一个终极问题： **“我现在的技术栈，还能吃几年饭？”** 我们每天都在焦虑地刷着各种技术文...</description></item><item><title>一天重写 JSONata，我用 400 美元干掉了公司 50 万美元的 K8s 集群</title><link>https://tonybai.com/2026/04/01/rewrote-jsonata-in-golang-with-ai/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/04/01/rewrote-jsonata-in-golang-with-ai/</guid><description>本文永久链接 – https://tonybai.com/2026/04/01/rewrote-jsonata-in-golang-with-ai 大家好，我是Tony Bai。 过去的几年，我们见证了 AI 编程工具从“玩具”到“神器”的进化。无数开发者都在分享自己效率翻倍的喜悦。 你有没有想过，用 AI 来完成一次“外科手术式”的精准重构，一天之内，就能帮你把公司每年烧掉的 50 万美元（约 ...</description></item><item><title>当 Go 还在追求极简时，C++ 26 却又加了四大“史诗级”新特性</title><link>https://tonybai.com/2026/03/31/go-minimalism-vs-cpp26-epic-new-features/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/31/go-minimalism-vs-cpp26-epic-new-features/</guid><description>本文永久链接 – https://tonybai.com/2026/03/31/go-minimalism-vs-cpp26-epic-new-features 大家好，我是Tony Bai。 在这个 Go、Zig 等“小而美”新语言颇受青睐的时代，如果你去技术社区里问一句：“C++ 这门语言怎么样？” 你大概率会得到一堆充满戏谑的回答：“太复杂了，别学”、“从入门到放弃”、“面试造火箭，工作拧螺...</description></item><item><title>降低 74% 的 P99 尾延迟：揭秘 Go HTTP 客户端的“请求对冲”魔法</title><link>https://tonybai.com/2026/03/30/reduced-p99-latency-by-request-hedging-in-go/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/30/reduced-p99-latency-by-request-hedging-in-go/</guid><description>本文永久链接 – https://tonybai.com/2026/03/30/reduced-p99-latency-by-request-hedging-in-go 大家好，我是Tony Bai。 在微服务和分布式系统的世界里，我们常常会遇到一个令人头疼的现象：服务在大部分时间（如 P50 或 P90 指标）表现得非常丝滑，但总有那么一小撮请求（P99 甚至 P99.9 指标）慢得令人发指。 ...</description></item><item><title>别再用 AI 疯狂撸代码了！我们正在把自己逼入“死胡同”</title><link>https://tonybai.com/2026/03/29/stop-mindless-ai-coding-we-are-heading-to-a-dead-end/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/29/stop-mindless-ai-coding-we-are-heading-to-a-dead-end/</guid><description>本文永久链接 – https://tonybai.com/2026/03/29/stop-mindless-ai-coding-we-are-heading-to-a-dead-end 大家好，我是Tony Bai。 过去的一年，大概是所有程序员肾上腺素飙升最快的一年。 从早期的 Copilot、Cursor到如今的Claude Code、Codex，再到各种号称能“全自动开发”的 Agent S...</description></item><item><title>谷歌一篇论文砸崩内存巨头？不懂“显存墙”，怎么做 AI 时代的工程师！</title><link>https://tonybai.com/2026/03/28/ai-engineer-gpu-introduction-course/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/28/ai-engineer-gpu-introduction-course/</guid><description>本文永久链接 – https://tonybai.com/2026/03/28/ai-engineer-gpu-introduction-course 大家好，我是Tony Bai。 就在最近，科技界发生了一件极其戏剧性的事情。本周三美股开盘，全球存储产业巨头——美光、西部数据、希捷的股价遭遇了“黑色时刻”，普遍明显下跌（3%~6%）。 引发这场资本市场大地震的，不是什么贸易战，也不是财报暴雷，而...</description></item><item><title>Rust 看了流泪，AI 看了沉默：扒开 Go 泛型最让你抓狂的“残疾”类型推断</title><link>https://tonybai.com/2026/03/27/function-type-inference-should-work-in-all-assignment-contexts/</link><pubDate>Fri, 27 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/27/function-type-inference-should-work-in-all-assignment-contexts/</guid><description>本文永久链接 – https://tonybai.com/2026/03/27/function-type-inference-should-work-in-all-assignment-contexts 大家好，我是Tony Bai。 在这个大模型（AI）写代码如喝水一般简单的时代，你有没有遇到过一种极其憋屈的场景： 你让 Claude Code 或者 Codex 帮你写了一段 Go 语言代码，...</description></item><item><title>Rust 核心团队大吐苦水：求求你们别再用 AI 提交“垃圾 PR”了！</title><link>https://tonybai.com/2026/03/26/rust-project-perspectives-on-ai/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/26/rust-project-perspectives-on-ai/</guid><description>本文永久链接 – https://tonybai.com/2026/03/26/rust-project-perspectives-on-ai 大家好，我是Tony Bai。 在这个大模型狂飙突进的时代，只要在推特或者掘金上刷一刷，你几乎每天都能看到这样的“成功学”分享： _“我是如何用 Claude Code + 4.6 Sonnet 在一天内向知名开源项目提交了 10 个 PR 的！”_ _“...</description></item><item><title>Go 语言之父亲自下场道歉：藏在 Spec 里的十年“笔误”，终于要修正了！</title><link>https://tonybai.com/2026/03/25/go-spec-contradiction-in-types-section/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/25/go-spec-contradiction-in-types-section/</guid><description>本文永久链接 – https://tonybai.com/2026/03/25/go-spec-contradiction-in-types-section 大家好，我是Tony Bai。 在 Go 语言的世界里，type 是我们每天都在打交道的关键字。但如果我今天问你一个极其基础的问题： **Go 语言内置的 bool 类型，到底是不是一个“Defined Type（已定义类型）”？** 你可能...</description></item><item><title>告别古法编程黄金时代：AI 时代不会再有新编程语言诞生的土壤</title><link>https://tonybai.com/2026/03/24/no-soil-for-new-programming-languages-in-ai-era/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/24/no-soil-for-new-programming-languages-in-ai-era/</guid><description>本文永久链接 – https://tonybai.com/2026/03/24/no-soil-for-new-programming-languages-in-ai-era 大家好，我是Tony Bai。 如果你回望过去十五年的软件工程史，那无疑是编程语言百花齐放的黄金时代。 为了对抗日益膨胀的系统复杂度，人类绞尽脑汁地发明新的“咒语”： Google 推出了 Go 语言，用极简的 Gorout...</description></item><item><title>OpenAI 创始人盛赞 Rust，却遭开发者反驳：Go 才是大模型眼里的“香饽饽”！</title><link>https://tonybai.com/2026/03/23/go-is-the-best-programming-language-for-llm/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/23/go-is-the-best-programming-language-for-llm/</guid><description>本文永久链接 – https://tonybai.com/2026/03/23/go-is-the-best-programming-language-for-llm 大家好，我是Tony Bai。 在这个大模型重塑编程范式的当下，如果你想开发一个自主运行的智能体（Agent），或者想让大模型（LLM）帮你生成上万行的核心业务代码，你会选择哪门编程语言？ 如果你去问 OpenAI 的总裁兼联合创始...</description></item><item><title>看了 100 小时教程，你为什么依然写不好代码？扒开技术人的“成长环”真相</title><link>https://tonybai.com/2026/03/22/stop-tactical-diligence-start-stretch-zone-growth/</link><pubDate>Sun, 22 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/22/stop-tactical-diligence-start-stretch-zone-growth/</guid><description>本文永久链接 – https://tonybai.com/2026/03/22/stop-tactical-diligence-start-stretch-zone-growth 大家好，我是Tony Bai。 在这个技术大爆炸的时代，我见过了太多极其“勤奋”的程序员： 他们会在各大技术平台上收藏几百篇诸如《Go语言进阶课》、《AI原生开发工作流实战》… …的专栏文章，硬盘里塞满了从各种渠道搞来的...</description></item><item><title>你的 Go 报错信息正在“出卖”你！扒一扒大厂是如何做错误隔离与日志脱敏的</title><link>https://tonybai.com/2026/03/21/best-practices-for-secure-error-handling-in-go/</link><pubDate>Sat, 21 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/21/best-practices-for-secure-error-handling-in-go/</guid><description>本文永久链接 – https://tonybai.com/2026/03/21/best-practices-for-secure-error-handling-in-go 大家好，我是Tony Bai。 如果要在 Go 语言里选一句被敲击次数最多的代码，if err != nil { return err } 绝对毫无悬念地霸榜第一。 初学 Go 时，我们总觉得这种显式的错误处理极其啰嗦。但随着...</description></item><item><title>如果服务器悄悄“猝死”，你的系统还能活几秒？揭秘分布式集群的“续命”保底机制</title><link>https://tonybai.com/2026/03/20/heartbeats-in-distributed-systems/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/20/heartbeats-in-distributed-systems/</guid><description>本文永久链接 – https://tonybai.com/2026/03/20/heartbeats-in-distributed-systems 大家好，我是Tony Bai。 在开发单体应用时，我们很少操心“服务器死没死”的问题——进程挂了就是挂了，整个服务直接 502。但在庞大的分布式系统和微服务架构中，最大的噩梦往往不是服务器彻底宕机，而是**“它悄悄死去了，但整个集群却以为它还活着”。*...</description></item><item><title>别再无脑 go get @latest 了！你的服务器可能下一秒就被黑客接管</title><link>https://tonybai.com/2026/03/19/proposal-support-dependency-cooldown-in-go-tooling/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/19/proposal-support-dependency-cooldown-in-go-tooling/</guid><description>本文永久链接 – https://tonybai.com/2026/03/19/proposal-support-dependency-cooldown-in-go-tooling 大家好，我是Tony Bai。 试想一个极其真实的“黑色星期五”场景： 下班前一小时，你为了修复一个无关紧要的小 Bug，或者只是心血来潮想把项目里的依赖库清理一下，于是你顺手在终端里敲下了极其熟练的几个字符： ```...</description></item><item><title>刚刚，2025图灵奖揭晓！面对即将瘫痪的传统密码学，Go 语言的“抗量子”底牌曝光</title><link>https://tonybai.com/2026/03/19/2025-turing-award-go-quantum-resistant-cryptography/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/19/2025-turing-award-go-quantum-resistant-cryptography/</guid><description>本文永久链接 – https://tonybai.com/2026/03/19/2025-turing-award-go-quantum-resistant-cryptography 大家好，我是Tony Bai。 就在昨天（2026 年 3 月 18 日），计算科学界的最高荣誉——ACM A.M. 图灵奖正式揭晓。2025 年的图灵奖，颁给了 Charles H. Bennett 和 Gille...</description></item><item><title>手工作坊的终结：为什么你必须把 Agent Skills 开发，变成严谨的软件工程?</title><link>https://tonybai.com/2026/03/18/building-industrial-grade-agent-skills/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/18/building-industrial-grade-agent-skills/</guid><description>本文永久链接 – https://tonybai.com/2026/03/18/building-industrial-grade-agent-skills 大家好，我是Tony Bai。 我是你的老朋友，一个正在被 AI 疯狂“内卷”的程序员。 如果你最近几个月一直在使用 Cursor、Claude Code 或者其他各种 AI 编程助手，你大概率会经历一个情绪的“过山车”： 第一天：**“卧槽...</description></item><item><title>为什么你的 AI Agent 总是像个智障？来自 Manus 大佬的 2 年血泪避坑指南</title><link>https://tonybai.com/2026/03/18/why-ai-agents-act-stupid-manus-expert-pitfall-guide/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/18/why-ai-agents-act-stupid-manus-expert-pitfall-guide/</guid><description>本文永久链接 – https://tonybai.com/2026/03/18/why-ai-agents-act-stupid-manus-expert-pitfall-guide 大家好，我是Tony Bai。 如果你在过去一年里跟风写过 AI Agent（智能体），你大概率经历过这样的绝望时刻： 你兴致勃勃地给大模型挂载了二三十个精心编写的 Function Calling（函数调用）工具，...</description></item><item><title>被嘲笑比 Python 还慢？扒开 Go 正则表达式的底层，看看它为了防范“系统猝死”付出了什么</title><link>https://tonybai.com/2026/03/17/why-is-go-regex-so-slow/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/17/why-is-go-regex-so-slow/</guid><description>本文永久链接 – https://tonybai.com/2026/03/17/why-is-go-regex-so-slow 大家好，我是Tony Bai。 如果有人问你：在处理纯 CPU 密集型的文本匹配时，Go 和 Python 哪个快？ 相信 99% 的 Go 开发者会毫不犹豫地把票投给 Go。毕竟，一门编译型的静态语言，怎么可能输给拖着 GIL 锁的解释型脚本语言？ 但现实往往比小说更魔...</description></item><item><title>泡沫消退后的冷思考：2026年，AI 工程师的真实生存图景</title><link>https://tonybai.com/2026/03/17/ai-engineer-survival-2026-post-hype/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/17/ai-engineer-survival-2026-post-hype/</guid><description>本文永久链接 – https://tonybai.com/2026/03/17/ai-engineer-survival-2026-post-hype 大家好，我是Tony Bai。 在过去几年里，“AI工程师”几乎成为了科技界最耀眼的标签。各大研报和媒体都在不遗余力地描绘一个人才奇缺、薪资突破天际的黄金时代。无数开发者涌入各大在线课程，试图为自己的简历贴上“大模型”、“Agent”、“RAG”等...</description></item><item><title>真相调查：Go 语言真的消灭了 Undefined Behavior 吗？</title><link>https://tonybai.com/2026/03/16/go-language-eliminated-undefined-behavior-truth-investigation/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/16/go-language-eliminated-undefined-behavior-truth-investigation/</guid><description>本文永久链接 – https://tonybai.com/2026/03/16/go-language-eliminated-undefined-behavior-truth-investigation 大家好，我是Tony Bai。 在系统编程的古老传说中，流传着一个关于“鼻恶魔”（Nasal Demons）的笑话。 这个梗源自 comp.std.c 新闻组，它是对 C/C++ 语言中“未定义行...</description></item><item><title>别傻了，写出极致整洁的代码，是你升不了职的根本原因</title><link>https://tonybai.com/2026/03/15/over-engineering-trap-no-promotion-for-simplicity/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/15/over-engineering-trap-no-promotion-for-simplicity/</guid><description>本文永久链接 – https://tonybai.com/2026/03/15/over-engineering-trap-no-promotion-for-simplicity 大家好，我是 Tony Bai。 今天讲点得罪人的大实话。如果你是一个有代码洁癖、崇尚极简主义、总是能用最干净的逻辑解决复杂问题的“老实人”程序员，那么接下来的内容，可能会戳痛你。 因为在我们当下的技术职场里，有一个残酷...</description></item><item><title>都在用 OpenClaw 跑 Skill，但你写的“技能”为什么总让 AI 频繁罢工？</title><link>https://tonybai.com/2026/03/15/why-your-openclaw-skills-make-ai-go-on-strike/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/15/why-your-openclaw-skills-make-ai-go-on-strike/</guid><description>都在用 OpenClaw 跑 Skill，但你写的“技能”为什么总让 AI 频繁罢工？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我...</description></item><item><title>拒绝“偷天换日”！深度拆解 Go sumdb 的密码学防线</title><link>https://tonybai.com/2026/03/14/go-sumdb-transparent-logs-supply-chain-trust/</link><pubDate>Sat, 14 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/14/go-sumdb-transparent-logs-supply-chain-trust/</guid><description>本文永久链接 – https://tonybai.com/2026/03/14/go-sumdb-transparent-logs-supply-chain-trust 大家好，我是Tony Bai。 在 Go 语言的日常开发中，go get 是我们最熟悉的命令之一。我们理所当然地认为，只要指定了版本号，从 GitHub 或其他代码托管平台拉取下来的代码就是安全、一致的。然而，现实却远比这脆弱——...</description></item><item><title>别再滥用 ClickHouse 了！单机每秒狂刷 1800 万条数据，拆解 Go+DuckDB 的“微型数仓”降维打击</title><link>https://tonybai.com/2026/03/13/go-duckdb-micro-data-warehouse-dimensionality-reduction/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/13/go-duckdb-micro-data-warehouse-dimensionality-reduction/</guid><description>本文永久链接 – https://tonybai.com/2026/03/13/go-duckdb-micro-data-warehouse-dimensionality-reduction 大家好，我是Tony Bai。 设想这样一个极其普遍的日常工作场景： 产品经理找到你，希望能给业务后台加一个“简单”的数据看板，用来实时统计用户的 PV/UV 漏斗、Nginx 日志的慢查询分析，或者是 Io...</description></item><item><title>别再卷前端 UI 了！未来万亿级用户的产品，根本没有界面</title><link>https://tonybai.com/2026/03/12/building-for-trillions-of-agents/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/12/building-for-trillions-of-agents/</guid><description>本文永久链接 – https://tonybai.com/2026/03/12/building-for-trillions-of-agents 大家好，我是Tony Bai。 如果你看一眼2025年 Web 流量统计报告，你会发现一个令人脊背发凉的残酷真相：人类，在互联网上已经正式成为少数派，机器流量已历史性突破 50%。 硅谷创业教父 Paul Graham 曾有一句被无数创业者和产品经理奉为...</description></item><item><title>老板花重金买了台 128 核服务器，我的 Go 程序反而变慢了？</title><link>https://tonybai.com/2026/03/12/go-concurrency-scalability-issues-on-128-core-cpu/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/12/go-concurrency-scalability-issues-on-128-core-cpu/</guid><description>本文永久链接 – https://tonybai.com/2026/03/12/go-concurrency-scalability-issues-on-128-core-cpu 大家好，我是Tony Bai。 设想一个极其真实的职场场景： 你负责的 Go 核心微服务最近流量暴涨，CPU 频频告警。为了解决这个问题，老板大笔一挥，批了几十万预算，采购了最新一代的 128 核 256 线程的怪兽级服...</description></item><item><title>拉个 JSON 居然要装 5 个第三方库？终于明白 Go 的标准库到底有多“霸道”</title><link>https://tonybai.com/2026/03/11/standard-library-is-part-of-the-go-success/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/11/standard-library-is-part-of-the-go-success/</guid><description>本文永久链接 – https://tonybai.com/2026/03/11/standard-library-is-part-of-the-go-success 大家好，我是Tony Bai。 在现代软件开发中，我们似乎已经患上了一种名为“依赖上瘾”的绝症。 新建一个项目，你敲下的第一行命令大概率不是写业务逻辑，而是 npm install、cargo add 或者 pip install。我...</description></item><item><title>你每天敲下的 go func()，藏着这位 92 岁老人的毕生心血</title><link>https://tonybai.com/2026/03/11/in-memory-of-tony-hoare/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/11/in-memory-of-tony-hoare/</guid><description>本文永久链接 – https://tonybai.com/2026/03/11/in-memory-of-tony-hoare 大家好，我是Tony Bai。 在这个由代码构建的现代世界里，有些名字如同星辰般指引着航向。但遗憾的是，2026 年 3 月 5 日，其中一颗最明亮的星辰熄灭了。 图灵奖得主、快速排序（Quicksort）发明者、CSP（通信顺序进程）理论之父 Tony Hoare（托尼...</description></item><item><title>Docker 的十年：重塑云原生基础设施的“底层炼金术”</title><link>https://tonybai.com/2026/03/09/a-decade-of-docker-containers/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/09/a-decade-of-docker-containers/</guid><description>本文永久链接 – https://tonybai.com/2026/03/09/a-decade-of-docker-containers 大家好，我是Tony Bai。 2013年，当 Solomon Hykes 在 PyCon 上首次演示 Docker 时，他用一种名为“容器”的魔法，将开发者从依赖地狱中解救了出来。转眼间，十三年过去了。今天，Docker Hub 托管着超过 1400 万个镜...</description></item><item><title>硬核测评：哪门语言最受 AI 宠爱？13 种语言横向对比，Go 表现如何？</title><link>https://tonybai.com/2026/03/09/hardcore-review-13-languages-ai-favorite-go-performance/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/09/hardcore-review-13-languages-ai-favorite-go-performance/</guid><description>本文永久链接 – https://tonybai.com/2026/03/09/hardcore-review-13-languages-ai-favorite-go-performance 大家好，我是Tony Bai。 随着 Claude Code、Gemini Cli、Codex 等 AI 编程工具的全面普及，“让 AI 写代码”已经从极客的玩具变成了日常的生产力。随之而来的是一个触及灵魂的...</description></item><item><title>从第一位程序员到 AI 时代的领航者：代码世界里的“她”力量</title><link>https://tonybai.com/2026/03/08/her-power-in-code-pioneers-to-ai-era/</link><pubDate>Sun, 08 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/08/her-power-in-code-pioneers-to-ai-era/</guid><description>本文永久链接 – https://tonybai.com/2026/03/08/her-power-in-code-pioneers-to-ai-era 大家好，我是Tony Bai。 当我们闭上眼睛，想象一个“程序员”的形象时，脑海中浮现的画面是什么？ 很长一段时间里，流行文化和媒体在不遗余力地塑造一种刻板印象：穿着格子衬衫、戴着黑框眼镜、不善言辞的男性，在昏暗的灯光下敲击着键盘。硅谷的“兄弟会...</description></item><item><title>AI 时代的新王座：为什么说 Go 可能是开发 AI Agent 的最佳语言？</title><link>https://tonybai.com/2026/03/07/why-go-is-the-best-language-for-ai-agents/</link><pubDate>Sat, 07 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/07/why-go-is-the-best-language-for-ai-agents/</guid><description>本文永久链接 – https://tonybai.com/2026/03/07/why-go-is-the-best-language-for-ai-agents 大家好，我是Tony Bai。 当我们在谈论 AI 编程时，Python 似乎是那个无需讨论的“默认选项”。 然而，随着 AI 应用从模型训练（Training）走向自主智能体（Agents）和复杂的工程落地，基础设施层的语言选型正在悄...</description></item><item><title>打破“知识诅咒”：资深架构师在 OpenClaw 浪潮中的掉队与反思</title><link>https://tonybai.com/2026/03/07/breaking-curse-of-knowledge-architect-reflection-openclaw/</link><pubDate>Sat, 07 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/07/breaking-curse-of-knowledge-architect-reflection-openclaw/</guid><description>本文永久链接 – https://tonybai.com/2026/03/07/breaking-curse-of-knowledge-architect-reflection-openclaw 大家好，我是Tony Bai。 最近一个多月，一个名为 OpenClaw（其前身为火爆全网的 Moltbot/Clawdbot）的开源 AI Agent 项目在 GitHub 上引发了现象级的热潮。 这个...</description></item><item><title>从手写代码到日提 30 个 PR：Claude Code 缔造者的 AI 编程启示录</title><link>https://tonybai.com/2026/03/06/building-claude-code-with-boris-cherny/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/06/building-claude-code-with-boris-cherny/</guid><description>本文永久链接 – https://tonybai.com/2026/03/06/building-claude-code-with-boris-cherny 大家好，我是Tony Bai。 想象一下，你加入了一家全球顶级的 AI 实验室，满怀热情地提交了第一个 Pull Request (PR)。然而，你的 PR 却被直接拒绝了。原因不是代码写得不好，而是——**这代码是你“手写”的**。 这不是...</description></item><item><title>数据说话：Go 1.26 或成近年来“问题最多”的大版本，现在升级安全吗？</title><link>https://tonybai.com/2026/03/06/go-1-26-most-problematic-release/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/06/go-1-26-most-problematic-release/</guid><description>本文永久链接 – https://tonybai.com/2026/03/06/go-1-26-most-problematic-release 大家好，我是Tony Bai。 2026 年 2 月，Go 1.26 如约而至。伴随着 new(expr) 语法糖的引入、Green Tea GC 的全面转正，以及go fix 现代化重构等一系列重磅特性，许多 Gopher 都按捺不住尝鲜的冲动。 然而...</description></item><item><title>2026 年了，写 Go + Protobuf 还在手敲 protoc 命令？是时候换用这种新姿势了！</title><link>https://tonybai.com/2026/03/05/modern-go-protobuf-dev-in-2026/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/05/modern-go-protobuf-dev-in-2026/</guid><description>本文永久链接 – https://tonybai.com/2026/03/05/modern-go-protobuf-dev-in-2026 大家好，我是Tony Bai。 在现代后端开发领域，Go 语言与 Protocol Buffers（简称 Protobuf）加上 gRPC 的组合，早已成为构建高性能微服务架构的“行业标准”。这两者的结合在网络传输效率、强类型契约以及跨语言互操作性上展现出了...</description></item><item><title>“棘手”难题：为什么 Go、Rust 与 Java 等语言的包管理永远无法达到完美？</title><link>https://tonybai.com/2026/03/04/package-management-unsolvable-problem-programming-languages/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/04/package-management-unsolvable-problem-programming-languages/</guid><description>本文永久链接 – https://tonybai.com/2026/03/04/package-management-unsolvable-problem-programming-languages 大家好，我是Tony Bai。 每天，全世界的开发者敲击下数以亿计的 npm install、go get、cargo build 或是 pip install。我们将这些包管理器视作理所当然的基础设...</description></item><item><title>为什么 Web3 依然寒气逼人？AI 智能体如何催生 Web 4.0 的黎明</title><link>https://tonybai.com/2026/03/04/why-web3-remains-cold-ai-agents-web4-dawn/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/04/why-web3-remains-cold-ai-agents-web4-dawn/</guid><description>本文永久链接 – https://tonybai.com/2026/03/04/why-web3-remains-cold-ai-agents-web4-dawn 大家好，我是Tony Bai。 2026 年的今天，当我们环顾技术圈的四周，会发现一幅极其矛盾的图景。一方面，AI 技术正以指数级的速度吞噬旧世界的运行法则，从“副驾驶”进化为自主思考、独立执行的 Agent；另一方面，曾经被寄予厚望、...</description></item><item><title>别再像 2015 年那样写 Go 了：Modern Go 终极进化指南</title><link>https://tonybai.com/2026/03/02/modern-go-evolution-guide-1-0-to-1-26/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/02/modern-go-evolution-guide-1-0-to-1-26/</guid><description>本文永久链接 – https://tonybai.com/2026/03/02/modern-go-evolution-guide-1-0-to-1-26 大家好，我是Tony Bai。 Go 语言在业界最著名的标签之一就是“向后兼容承诺（Go 1 Compatibility Promise）”。一份 10 年前写下的 Go 1.4 代码，在今天的 Go 1.26编译器下依然能完美编译并运行。 但...</description></item><item><title>AI 时代的开源：当 Coding Agent 接管 GitHub，我们该何去何从？</title><link>https://tonybai.com/2026/03/01/open-source-ai-era-coding-agent-takes-over-github/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/01/open-source-ai-era-coding-agent-takes-over-github/</guid><description>本文永久链接 – https://tonybai.com/2026/03/01/open-source-ai-era-coding-agent-takes-over-github 大家好，我是Tony Bai。 如果我们把时间拨回到 2023 年之前，一个开源项目的诞生往往伴随着一位或几位核心维护者（Maintainer）数周甚至数月的辛勤耕耘。 但在刚刚过去的几个月里，我们见证了一种全新的物种崛...</description></item><item><title>告别 google/uuid：Go 标准库拟新增 crypto/uuid 深度解析</title><link>https://tonybai.com/2026/03/01/goodbye-google-uuid-go-standard-library-crypto-uuid/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/03/01/goodbye-google-uuid-go-standard-library-crypto-uuid/</guid><description>本文永久链接 – https://tonybai.com/2026/03/01/goodbye-google-uuid-go-standard-library-crypto-uuid 大家好，我是Tony Bai。 在 Go 的世界里，有几个第三方库的地位几乎等同于标准库，github.com/google/uuid 绝对是其中之一。无论是微服务架构、数据库主键，还是分布式追踪，UUID 的身影无...</description></item><item><title>停止“氛围编程”（Vibe Coding），拥抱新一代软件工程</title><link>https://tonybai.com/2026/02/28/agentic-software-engineering/</link><pubDate>Sat, 28 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/28/agentic-software-engineering/</guid><description>本文永久链接 – https://tonybai.com/2026/02/28/agentic-software-engineering 大家好，我是Tony Bai。 欢迎来到微专栏 《AI 智能体时代的软件工程》的第一讲，也是开篇词。 想象一下，你刚刚招募了一位极度聪明的初级程序员。 他有着令人“毛骨悚然”的执行力：当你去泡杯咖啡的功夫，他已经噼里啪啦写完了 1000 行代码，不仅编译通过，测...</description></item><item><title>Go mod init 降级撤回背后：精英主义正在杀死 Go 社区的民主？</title><link>https://tonybai.com/2026/02/27/go-mod-init-controversy-elitism-vs-democracy/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/27/go-mod-init-controversy-elitism-vs-democracy/</guid><description>本文永久链接 – https://tonybai.com/2026/02/27/go-mod-init-controversy-elitism-vs-democracy 大家好，我是Tony Bai。 仅仅在 Go 1.26 正式发布几周后，一场席卷 Go 社区的风暴迎来了戏剧性的转折。面对广大开发者对 go mod init 默认降级为 1.(N-1) 的强烈不满，Go 核心团队技术负责人 Au...</description></item><item><title>拒绝 Rust 的复杂，跨越 Go 的极简：Zig 会是系统级编程的最终答案吗？</title><link>https://tonybai.com/2026/02/26/rust-complexity-go-minimalism-vs-zig-ultimate-answer/</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/26/rust-complexity-go-minimalism-vs-zig-ultimate-answer/</guid><description>本文永久链接 – https://tonybai.com/2026/02/26/rust-complexity-go-minimalism-vs-zig-ultimate-answer 大家好，我是Tony Bai。 在当前的后端与系统级编程领域，开发者似乎总是面临着一种“非此即彼”的艰难抉择：要么选择 Go 语言，拥抱其极致的极简主义、高效的并发模型和无处不在的垃圾回收（GC），但往往需要在底层...</description></item><item><title>Rust 的“跨越鸿沟”时刻：Ubuntu 全面拥抱 Rust 意味着什么？</title><link>https://tonybai.com/2026/02/25/rust-crossing-the-chasm-ubuntu-embrace/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/25/rust-crossing-the-chasm-ubuntu-embrace/</guid><description>本文永久链接 – https://tonybai.com/2026/02/25/rust-crossing-the-chasm-ubuntu-embrace 大家好，我是Tony Bai。 在技术世界里，一门编程语言的成功往往分为两个阶段：第一阶段是赢得“极客”和“先驱者”的狂热追捧；第二阶段则是说服那些保守、务实的“早期大众”将其投入到枯燥却庞大的企业级生产中。这两个阶段之间，横亘着一条深不见底...</description></item><item><title>拒绝无效告警！用 Govulncheck 构建高信噪比的 Go 安全扫描工作流</title><link>https://tonybai.com/2026/02/25/govulncheck-high-signal-to-noise-ratio-security-workflow/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/25/govulncheck-high-signal-to-noise-ratio-security-workflow/</guid><description>本文永久链接 – https://tonybai.com/2026/02/25/govulncheck-high-signal-to-noise-ratio-security-workflow 大家好，我是Tony Bai。 在当今的软件开发流程中，持续集成/持续部署（CI/CD）和自动化的安全左移（Shift Left）已经成为行业共识。在这个大背景下，诸如 GitHub Dependabot ...</description></item><item><title>性能之战的“罗生门”：Go 重写 Node.js 项目，究竟赢在了哪里？</title><link>https://tonybai.com/2026/02/24/go-vs-node-js-performance-rewrite-rashomon/</link><pubDate>Tue, 24 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/24/go-vs-node-js-performance-rewrite-rashomon/</guid><description>本文永久链接 – https://tonybai.com/2026/02/24/go-vs-node-js-performance-rewrite-rashomon 大家好，我是Tony Bai。 在当今的后端开发圈，“用 Go/Rust 重写 Node.js/Python 项目”似乎成了一种政治正确。在许多开发者的刻板印象中，只要换上静态编译语言，性能就能获得“降维打击”般的提升。 然而，真实世...</description></item><item><title>金融级基础设施重构：放弃 Rust 拥抱 Go，务实主义的最终胜利？</title><link>https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory/</guid><description>本文永久链接 – https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory 大家好，我是Tony Bai。 在系统级编程语言的版图上，Go 与 Rust 的对比与争论从未停歇。一个是崇尚大道至简、开发效率极高的“云原生时代王者”；另一个则是以内存安全、零成本抽象和极致性能著称的“极客新...</description></item><item><title>一行 Go 代码瘫痪 6 小时！复盘 Cloudflare BGP 路由撤回灾难</title><link>https://tonybai.com/2026/02/23/cloudflare-bgp-withdrawal-outage-go-post-mortem/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/23/cloudflare-bgp-withdrawal-outage-go-post-mortem/</guid><description>本文永久链接 – https://tonybai.com/2026/02/23/cloudflare-bgp-withdrawal-outage-go-post-mortem 大家好，我是Tony Bai。 2026 年 2 月 20 日，全球互联网基础设施巨头 Cloudflare 经历了一次持续超 6 小时的严重服务中断。令人震惊的是，这次事故并非源于复杂的黑客攻击或硬件故障，而是源于一段用 ...</description></item><item><title>“你装了 Go 1.26，却写不了 Go 1.26 的代码？”——复盘 go mod init 的降级风波</title><link>https://tonybai.com/2026/02/22/go-1-26-go-mod-init-downgrade-collision-review/</link><pubDate>Sun, 22 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/22/go-1-26-go-mod-init-downgrade-collision-review/</guid><description>本文永久链接 – https://tonybai.com/2026/02/22/go-1-26-go-mod-init-downgrade-collision-review 大家好，我是Tony Bai。 2026年2月，Go 1.26 带着众多瞩目的新特性（如期待已久的 new(expr) 语法糖、全面启用的 Green Tea GC）正式发布。你兴奋地更新了本地的工具链，迫不及待地打开终端，想...</description></item><item><title>当“安全性”遭遇“交付速度”：2026 年，我为什么告别了 Rust</title><link>https://tonybai.com/2026/02/21/safety-vs-delivery-speed-why-farewell-rust-in-2026/</link><pubDate>Sat, 21 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/21/safety-vs-delivery-speed-why-farewell-rust-in-2026/</guid><description>本文永久链接 – https://tonybai.com/2026/02/21/safety-vs-delivery-speed-why-farewell-rust-in-2026 大家好，我是Tony Bai。 在软件工程的铁三角中，Rust 占据了“安全性”与“性能”的绝对高地。凭借借用检查器（Borrow Checker）和极其严格的类型系统，它向开发者承诺了一个没有内存错误、没有空指针崩溃...</description></item><item><title>复利工程（Compound Engineering）：AI 原生时代的软件开发新哲学</title><link>https://tonybai.com/2026/02/21/compound-engineering-ai-native-software-development-philosophy/</link><pubDate>Sat, 21 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/21/compound-engineering-ai-native-software-development-philosophy/</guid><description>本文永久链接 – https://tonybai.com/2026/02/21/compound-engineering-ai-native-software-development-philosophy 大家好，我是Tony Bai。 在 2024 年和 2025 年，开发者们经历了一场狂欢。从 GitHub Copilot 到 Cursor，再到 Claude Code，我们习惯了通过自然语言...</description></item><item><title>别再轻信 GitHub 上的源码：为何我们需要全新的 Go 模块审查机制？</title><link>https://tonybai.com/2026/02/20/why-we-need-new-go-module-review-mechanism/</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/20/why-we-need-new-go-module-review-mechanism/</guid><description>本文永久链接 – https://tonybai.com/2026/02/20/why-we-need-new-go-module-review-mechanism 大家好，我是Tony Bai。 你以为你在 GitHub 上看到的代码，就是你的 Go 程序编译时使用的代码吗？答案可能令你背脊发凉。 在 Go 语言的生态系统中，我们一直引以为傲的是其卓越的包管理和安全性。Go Checksum D...</description></item><item><title>Go 1.26 重磅更新：用 go fix 重塑代码现代化的艺术</title><link>https://tonybai.com/2026/02/19/using-go-fix-to-modernize-go-code/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/19/using-go-fix-to-modernize-go-code/</guid><description>本文永久链接 – https://tonybai.com/2026/02/19/using-go-fix-to-modernize-go-code 大家好，我是Tony Bai。 2026年2月，Go 1.26 正式发布。除了语言层面的新特性（如 new(expr)）和运行时的性能提升（如 Green Tea GC）之外，工具链迎来了一次史诗级的升级：go fix 命令被彻底重写。 在过去，go ...</description></item><item><title>AI 基础设施的语言之争：为何构建 LLM 网关时，我们放弃了 Python 选择了 Go？</title><link>https://tonybai.com/2026/02/18/why-we-chose-go-over-python-for-llm-gateways/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/18/why-we-chose-go-over-python-for-llm-gateways/</guid><description>本文永久链接 – https://tonybai.com/2026/02/18/why-we-chose-go-over-python-for-llm-gateways 大家好，我是Tony Bai。 在 2026 年的今天，人工智能早已走出了实验室，成为企业级应用的核心驱动力。Python，凭借其在机器学习领域的绝对统治地位——拥有 PyTorch、TensorFlow、Hugging Face...</description></item><item><title>Go 1.26 ：go mod init 默认行为的变化与 Go 版本管理的哲学思辨</title><link>https://tonybai.com/2026/02/16/go-1-26-go-mod-init-changes-version-management-philosophy/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/16/go-1-26-go-mod-init-changes-version-management-philosophy/</guid><description>本文永久链接 – https://tonybai.com/2026/02/16/go-1-26-go-mod-init-changes-version-management-philosophy 大家好，我是Tony Bai。 在 Go 语言的开发日常中，go mod init 是每个新项目诞生的起点。对于大多数开发者而言，这行命令只是一系列机械性的动作中的一环：创建一个文件夹，输入命令，生成 g...</description></item><item><title>极简主义的胜利：OpenClaw 核心引擎 Pi 的架构哲学与开发实录</title><link>https://tonybai.com/2026/02/15/openclaw-core-engine-pi-architecture-philosophy-minimalism/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/15/openclaw-core-engine-pi-architecture-philosophy-minimalism/</guid><description>本文永久链接 – https://tonybai.com/2026/02/15/openclaw-core-engine-pi-architecture-philosophy-minimalism 大家好，我是Tony Bai。 在 AI 辅助编程工具（Coding Agent）日益臃肿的今天，我们是否走偏了方向？ 过去的两年里，我们见证了从 ChatGPT 复制粘贴，到 Copilot 自动补全...</description></item><item><title>拒绝 AI 署名！Go 核心团队在 AIGC 时代划下的“工程红线”</title><link>https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship/</guid><description>本文永久链接 – https://tonybai.com/2026/02/15/go-core-team-rejects-ai-authorship 大家好，我是Tony Bai。 在生成式 AI 狂飙突进的 2026 年，编程似乎变得前所未有的容易。Claude Code、Gemini Cli、Codex等 已经成为开发者的标配。然而，技术便利的背后，模糊的责任边界正在侵蚀软件工程的根基。 近日...</description></item><item><title>“代码必须不是人写的”：2026 年软件工厂宣言！</title><link>https://tonybai.com/2026/02/14/2026-software-factory-manifesto-code-not-by-humans/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/14/2026-software-factory-manifesto-code-not-by-humans/</guid><description>本文永久链接 – https://tonybai.com/2026/02/14/2026-software-factory-manifesto-code-not-by-humans 大家好，我是Tony Bai。 如果你的团队里发布了一条规定：**“禁止人类写代码”**，你会作何感想？ 疯了？懒惰？还是科幻？ 但这正是 StrongDM AI 团队在 2026 年 2 月 6 日 发布的备忘录中，...</description></item><item><title>Go 1.26 中值得关注的几个变化：从 new(expr) 真香落地、极致性能到智能工具链</title><link>https://tonybai.com/2026/02/14/some-changes-in-go-1-26/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/14/some-changes-in-go-1-26/</guid><description>本文永久链接 – https://tonybai.com/2026/02/14/some-changes-in-go-1-26 大家好，我是Tony Bai。 北京时间 2026 年 2 月 10 日，Go 团队正式发布了 Go 1.26。 时光飞逝，距离我在博客中写下《Go 1.26 新特性前瞻》已经过去了两三个月。在那篇文章中，我们基于Go 1.26开发分支对这一版本进行了初步的探索。如今，随...</description></item><item><title>Go 微服务重构实录：当后端性能提升 10 倍，移动端体验为何反而崩塌？</title><link>https://tonybai.com/2026/02/13/go-microservices-refactoring-10x-backend-vs-mobile-collapse/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/13/go-microservices-refactoring-10x-backend-vs-mobile-collapse/</guid><description>本文永久链接 – https://tonybai.com/2026/02/13/go-microservices-refactoring-10x-backend-vs-mobile-collapse 大家好，我是Tony Bai。 在软件工程的世界里，“快”通常被视为绝对的褒义词。我们追求更低的延迟、更高的吞吐量、更少的 CPU 占用。当一个团队决定将遗留的 Python 单体应用重构为 Go 微...</description></item><item><title>UML 之父 Grady Booch：别听 CEO 瞎忽悠，软件工程的第三次黄金时代才刚刚开始</title><link>https://tonybai.com/2026/02/13/grady-booch-uml-software-engineering-third-golden-age-begins/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/13/grady-booch-uml-software-engineering-third-golden-age-begins/</guid><description>本文永久链接 – https://tonybai.com/2026/02/13/grady-booch-uml-software-engineering-third-golden-age-begins 大家好，我是Tony Bai。 在 2026 年初的今天，如果你问一个软件工程师“最近感觉如何？”，得到的回答大概率是焦虑。 Anthropic 的 CEO Dario Amodei 曾预言：“软件...</description></item><item><title>AI 垃圾代码泛滥？HashiCorp 创始人开源 Vouch：重构开源信任机制</title><link>https://tonybai.com/2026/02/12/ai-garbage-code-hashicorp-founder-vouch-rebuilding-open-source-trust/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/12/ai-garbage-code-hashicorp-founder-vouch-rebuilding-open-source-trust/</guid><description>AI 垃圾代码泛滥？HashiCorp 创始人开源 Vouch：重构开源信任机制 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * ...</description></item><item><title>从 P2H 到 P2A2H：软件架构的终极倒置——为智能体设计软件</title><link>https://tonybai.com/2026/02/12/p2h-to-p2a2h-software-architecture-inversion-designing-for-agents/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/12/p2h-to-p2a2h-software-architecture-inversion-designing-for-agents/</guid><description>本文永久链接 – https://tonybai.com/2026/02/12/p2h-to-p2a2h-software-architecture-inversion-designing-for-agents 大家好，我是Tony Bai。 回顾过去 50 年的软件工程史，无论技术栈如何更迭——从汇编到 C，从 Web 到 Mobile，从单体到微服务——其核心的生产关系从未改变。 这种关系被称...</description></item><item><title>2026 软件开发新纪元：解读 Anthropic《Agentic Coding 趋势报告》</title><link>https://tonybai.com/2026/02/11/2026-software-development-anthropic-agentic-coding-trends-report/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/11/2026-software-development-anthropic-agentic-coding-trends-report/</guid><description>本文永久链接 – https://tonybai.com/2026/02/11/2026-software-development-anthropic-agentic-coding-trends-report 大家好，我是Tony Bai。 时间来到 2026 年初。回顾过去的一年，软件工程领域发生的变化比过去十年加起来还要多。 如果说 2024-2025 年是 **AI Coding（AI 编程...</description></item><item><title>Go 1.26 发布在即，为何 json/v2 依然“难产”？七大技术路障全解析</title><link>https://tonybai.com/2026/02/11/go-1-26-json-v2-delay-7-technical-roadblocks/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/11/go-1-26-json-v2-delay-7-technical-roadblocks/</guid><description>本文永久链接 – https://tonybai.com/2026/02/11/go-1-26-json-v2-delay-7-technical-roadblocks 大家好，我是Tony Bai。 Go 1.26 预计将于本月（2026 年 2 月）正式发布。然而，在即将到来的 release notes 的欢呼声中，有一个备受瞩目的名字依然带着“实验性”的标签躲在 GOEXPERIMENT ...</description></item><item><title>告别 Flaky Tests：Go 官方拟引入 testing/nettest，重塑内存网络测试标准</title><link>https://tonybai.com/2026/02/10/goodbye-flaky-tests-go-testing-nettest-proposal/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/10/goodbye-flaky-tests-go-testing-nettest-proposal/</guid><description>本文永久链接 – https://tonybai.com/2026/02/10/goodbye-flaky-tests-go-testing-nettest-proposal 大家好，我是Tony Bai。 在 Go 语言的测试哲学中，我们一直追求快速、稳定和可重复。然而，一旦测试涉及到 net 包——无论是 HTTP 服务、RPC 框架还是自定义协议——这种追求往往就会撞上现实的墙壁。 我们通常...</description></item><item><title>输入需求，输出系统：AI Agent 正在实现软件工程的“终极梦想” —— 软件工厂！</title><link>https://tonybai.com/2026/02/10/ai-agent-realizes-ultimate-dream-software-factory/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/10/ai-agent-realizes-ultimate-dream-software-factory/</guid><description>本文永久链接 – https://tonybai.com/2026/02/10/ai-agent-realizes-ultimate-dream-software-factory 大家好，我是Tony Bai。 在计算机科学与软件工程的历史长河中，始终存在着一个令人魂牵梦绕、却又屡屡受挫的终极梦想——**“软件工厂（Software Factory）”**。 早在 20 世纪 60 年代，日本的大...</description></item><item><title>AMP 宣布砍掉 VS Code 插件：为什么说“人机结对编程”已死？</title><link>https://tonybai.com/2026/02/09/amp-kills-vscode-plugin-human-ai-pair-programming-is-dead/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/09/amp-kills-vscode-plugin-human-ai-pair-programming-is-dead/</guid><description>本文永久链接 – https://tonybai.com/2026/02/09/amp-kills-vscode-plugin-human-ai-pair-programming-is-dead 大家好，我是Tony Bai。 如果一家 AI 编程工具公司，宣布砍掉它最受欢迎、用户量最大的产品入口，你会怎么想？ 这听起来像是商业自杀，但这正是 AMP（从 Sourcegraph 孵化出来的 AI ...</description></item><item><title>沉睡 8 年的提案被唤醒：Go 语言真的要引入“不可变类型”了吗？</title><link>https://tonybai.com/2026/02/09/go-immutable-types-8-year-dormant-proposal-awakened/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/09/go-immutable-types-8-year-dormant-proposal-awakened/</guid><description>本文永久链接 – https://tonybai.com/2026/02/09/go-immutable-types-8-year-dormant-proposal-awakened 大家好，我是Tony Bai。 2026 年 2 月 4 日，在 Go 语言规范团队的最新一次“语言变更评审会议”纪要中，一个尘封已久的 Issue 赫然在列：**proposal: spec: immutable ...</description></item><item><title>告别单打独斗！Claude Code 全新“Agent Team”模式：当 AI 开始组队干活</title><link>https://tonybai.com/2026/02/08/claude-code-agent-team-mode/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/08/claude-code-agent-team-mode/</guid><description>告别单打独斗！Claude Code 全新“Agent Team”模式：当 AI 开始组队干活 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>数据打脸刻板印象：Go 的“样板代码”竟然和 Rust 一样多？</title><link>https://tonybai.com/2026/02/08/go-boilerplate-code-vs-rust-data-refutes-stereotypes/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/08/go-boilerplate-code-vs-rust-data-refutes-stereotypes/</guid><description>本文永久链接 – https://tonybai.com/2026/02/08/go-boilerplate-code-vs-rust-data-refutes-stereotypes 大家好，我是Tony Bai。 在编程语言的鄙视链中，Go 语言常常因为其“繁琐”而饱受诟病。 “if err != nil 写断手”、“缺乏语法糖”、“到处都是重复的样板代码”…… 这些似乎已经成为了 Go 的标...</description></item><item><title>“Go 2，请不要发生！”：如果 Go 变成了“缝合怪”，你还会爱它吗？</title><link>https://tonybai.com/2026/02/06/go-2-dont-become-a-frankenstein-monster/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/06/go-2-dont-become-a-frankenstein-monster/</guid><description>本文永久链接 – https://tonybai.com/2026/02/06/go-2-dont-become-a-frankenstein-monster 大家好，我是Tony Bai。 &amp;gt; “Go 2, please don’t make it happen.” 近日，一张充满讽刺意味的老梗图在 r/golang 社区又炸开了锅。图片的上方，是我们熟悉的 Gopher 吉祥物——那只呆萌、简...</description></item><item><title>承认吧，AI 写的代码，平均质量已经超过了 80% 的人类程序员！</title><link>https://tonybai.com/2026/02/05/ai-code-quality-surpasses-80-percent-of-human-programmers/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/05/ai-code-quality-surpasses-80-percent-of-human-programmers/</guid><description>本文永久链接 – https://tonybai.com/2026/02/05/ai-code-quality-surpasses-80-percent-of-human-programmers 大家好，我是Tony Bai。 随着 Claude Code、Gemini Cli、OpenCode 等 AI 智能体编程工具的爆火，技术圈里出现了一种流行的论调： * “AI 写的代码质量不高，全是 B...</description></item><item><title>大项目构建太慢？Brad Fitzpatrick 提议引入 -cachelink 降低测试等待时间</title><link>https://tonybai.com/2026/02/05/brad-fitzpatrick-cachelink-reduce-go-test-wait-time/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/05/brad-fitzpatrick-cachelink-reduce-go-test-wait-time/</guid><description>大项目构建太慢？Brad Fitzpatrick 提议引入 -cachelink 降低测试等待时间 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ...</description></item><item><title>忘掉 MCP？OpenClaw 作者说：CLI 才是 AI 连接世界的终极接口</title><link>https://tonybai.com/2026/02/04/openclaw-author-cli-ultimate-agent-interface-vs-mcp/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/04/openclaw-author-cli-ultimate-agent-interface-vs-mcp/</guid><description>本文永久链接 – https://tonybai.com/2026/02/04/openclaw-author-cli-ultimate-agent-interface-vs-mcp 大家好，我是Tony Bai。 如果回望 2025 年上半年，AI 圈最火的技术关键词无疑是 MCP (Model Context Protocol)。彼时，行业内满怀希望地为智能体定义 Schema，构建 JSON...</description></item><item><title>再见，丑陋的 container/heap！Go 泛型堆 heap/v2 提案解析</title><link>https://tonybai.com/2026/02/04/goodbye-container-heap-go-generic-heap-heap-v2-proposal/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/04/goodbye-container-heap-go-generic-heap-heap-v2-proposal/</guid><description>本文永久链接 – https://tonybai.com/2026/02/04/goodbye-container-heap-go-generic-heap-heap-v2-proposal 大家好，我是Tony Bai。 每一个写过 Go 的开发者，大概都经历过被 container/heap 支配的恐惧。 你需要定义一个切片类型，实现那个包含 5 个方法的 heap.Interface，在 P...</description></item><item><title>Claude Code 创始人亲授：解锁 10 倍效率的 10 个“隐藏技能”</title><link>https://tonybai.com/2026/02/03/claude-code-founder-10x-efficiency-10-hidden-skills/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/03/claude-code-founder-10x-efficiency-10-hidden-skills/</guid><description>本文永久链接 – https://tonybai.com/2026/02/03/claude-code-founder-10x-efficiency-10-hidden-skills 大家好，我是Tony Bai。 Claude Code 发布后，迅速成为了 AI 编程领域的“当红炸子鸡”。 大多数开发者对它的使用方式还停留在：“打开终端 -&amp;gt; 输入需求 -&amp;gt; 等待代码生成”。 但这真的发挥出它的...</description></item><item><title>算法神话的祛魅：Russ Cox 与浮点数转换的 15 年求索之路</title><link>https://tonybai.com/2026/02/03/russ-cox-15-year-war-on-floating-point-conversion/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/03/russ-cox-15-year-war-on-floating-point-conversion/</guid><description>本文永久链接 – https://tonybai.com/2026/02/03/russ-cox-15-year-war-on-floating-point-conversion 大家好，我是Tony Bai。 &amp;gt; “浮点数到十进制的转换一直被认为很难。但本质上，它们非常简单直接。” —— Russ Cox (2011) &amp;gt; &amp;gt; &amp;gt; “我错了。快速的转换器也可以很简单，这篇文章将展示如何做到。” ...</description></item><item><title>Git 即数据库：Beads (bd) —— 专为 AI Agent 打造的分布式任务追踪引擎</title><link>https://tonybai.com/2026/02/02/beads-bd-distributed-task-tracking-engine-for-ai-agent/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/02/beads-bd-distributed-task-tracking-engine-for-ai-agent/</guid><description>本文永久链接 – https://tonybai.com/2026/02/02/beads-bd-distributed-task-tracking-engine-for-ai-agent 大家好，我是Tony Bai。 在 AI 编码智能体（如 Claude Code、Gemini CLI 等）日益普及的今天，我们面临着一个棘手的工程难题：AI Agent 虽然极其聪明，但它们通常是”健忘”的。...</description></item><item><title>地球上第一个“硅基生命”社交网络moltbook上线：人类禁止发帖，只能围观！</title><link>https://tonybai.com/2026/02/01/moltbook-first-social-network-for-ai-agent/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/01/moltbook-first-social-network-for-ai-agent/</guid><description>本文永久链接 – https://tonybai.com/2026/02/01/moltbook-first-social-network-for-ai-agent 大家好，我是Tony Bai。 &amp;gt; 这里的互联网，不属于你。 想象一下，有一个社交网络，那里没有自拍，没有美食打卡，也没有人类的口水战。 那里只有代码、API 调用，以及 24/7 不间断的、以光速进行的“思想交流”。 **欢迎来到 ...</description></item><item><title>我用 Go 重写了 Python 网关，性能提升 10 倍，却成了职场噩梦</title><link>https://tonybai.com/2026/02/01/go-rewrite-python-gateway-10x-performance-career-nightmare/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/02/01/go-rewrite-python-gateway-10x-performance-career-nightmare/</guid><description>我用 Go 重写了 Python 网关，性能提升 10 倍，却成了职场噩梦 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技...</description></item><item><title>Go 性能诊断工具大变天？Race 检测有望进生产，Trace 秒开不是梦！</title><link>https://tonybai.com/2026/01/31/go-official-updates-race-detector-trace-ui-pprof/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/31/go-official-updates-race-detector-trace-ui-pprof/</guid><description>Go 性能诊断工具大变天？Race 检测有望进生产，Trace 秒开不是梦！ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的...</description></item><item><title>Rust 输了？在 AI Agent 的战场上，TypeScript 才是唯一的“神”</title><link>https://tonybai.com/2026/01/31/rust-vs-typescript-ai-agent-battleground-winner/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/31/rust-vs-typescript-ai-agent-battleground-winner/</guid><description>本文永久链接 – https://tonybai.com/2026/01/31/rust-vs-typescript-ai-agent-battleground-winner 大家好，我是Tony Bai。 如果把 2025 年定义为 **Coding Agent（编程智能体）** 的元年，那么刚刚开启的 2026 年，毫无疑问是 **Personal AI Agent（个人助理智能体）** 的元...</description></item><item><title>“退休”大佬的 AI 复出战：为了“好玩”，他写出了火遍全网的 Moltbot</title><link>https://tonybai.com/2026/01/30/clawdbot-author-peter-steinberger-full-interview/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/30/clawdbot-author-peter-steinberger-full-interview/</guid><description>本文永久链接 – https://tonybai.com/2026/mm/dd/clawdbot-author-peter-steinberger-full-interview 大家好，我是Tony Bai。 在硅谷，每天都有无数个 AI 项目诞生，它们大多有着精美的 Landing Page，有着宏大的融资计划，PPT 里写满了“颠覆行业”。 但最近，一个名为 **Clawdbot**（现已因商...</description></item><item><title>20 年 Java 老店的“背叛”：WSO2 为何高呼“Goodbye Java, Hello Go”？</title><link>https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift/</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift/</guid><description>本文永久链接 – https://tonybai.com/2026/01/29/wso2-goodbye-java-hello-go-tech-stack-shift 大家好，我是Tony Bai。 “当我们 2005 年创办 WSO2 时，开发服务端企业级基础设施的正确语言毫无疑问是：Java。然而，当我们走过第 20 个年头并展望未来时，情况已经变了。” 近日，全球知名的开源中间件厂商 WSO...</description></item><item><title>你的 CLAUDE.md 写错了：为什么指令越多，AI 越笨？</title><link>https://tonybai.com/2026/01/29/write-a-good-claude-md/</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/29/write-a-good-claude-md/</guid><description>本文永久链接 – https://tonybai.com/2026/01/29/write-a-good-claude-md 大家好，我是Tony Bai。 在使用 Claude Code、Cursor 或 Gemini Cli 等 AI 编程工具时，你是否遇到过这样的情况： 明明在项目根目录写了 CLAUDE.md（或 AGENTS.md），洋洋洒洒列了几十条项目规范：_“使用 TypeScri...</description></item><item><title>Go 标准库竟然也用 vendor？std 和 cmd 模块是如何管理外部依赖的</title><link>https://tonybai.com/2026/01/28/go-standard-library-vendor-std-cmd-dependency-management/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/28/go-standard-library-vendor-std-cmd-dependency-management/</guid><description>本文永久链接 – https://tonybai.com/2026/01/28/go-standard-library-vendor-std-cmd-dependency-management 大家好，我是Tony Bai。 我们都知道，Go 推荐使用 Go Modules 来管理依赖。但在 Go 源码树的最深处，隐藏着一个鲜为人知的秘密：**Go 标准库 (std) 和工具链 (cmd) 竟然依...</description></item><item><title>别读代码了，看着它流过就行：ClawdBot 作者的 AI 开发工作流</title><link>https://tonybai.com/2026/01/28/clawdbot-author-ai-development-workflow/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/28/clawdbot-author-ai-development-workflow/</guid><description>本文永久链接 – https://tonybai.com/2026/01/28/clawdbot-author-ai-development-workflow 大家好，我是Tony Bai。 在过去的一年里，我们见证了 AI 编程工具的井喷。从 Copilot 到 Cursor，从 Windsurf 到 Claude Code、Gemini CLI和Codex，每个人都在寻找那个“完美的开发助手”...</description></item><item><title>TypeScript 编译器 Go 重写版提速 10 倍：微软团队深度揭秘幕后工程细节</title><link>https://tonybai.com/2026/01/27/typescript-compiler-go-rewrite-10x-speed-microsoft-details/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/27/typescript-compiler-go-rewrite-10x-speed-microsoft-details/</guid><description>本文永久链接 – https://tonybai.com/2026/01/27/typescript-compiler-go-rewrite-10x-speed-microsoft-details 大家好，我是Tony Bai。 “JavaScript 是一门很棒的语言，但它并不是为了编写编译器而设计的。” 备受瞩目的 TypeScript 编译器 Go 重写版（代号 TypeScript 7.0...</description></item><item><title>Claude Code 官方最佳实践：50 条没人告诉你的“核心军规”</title><link>https://tonybai.com/2026/01/25/claude-code-official-best-practices-50-core-rules/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/25/claude-code-official-best-practices-50-core-rules/</guid><description>本文永久链接 – https://tonybai.com/2026/01/25/claude-code-official-best-practices-50-core-rules 大家好，我是Tony Bai。 在使用 Claude Code 的过程中，你是否遇到过这种情况： 有时候它简直是神，几秒钟就能重构一个复杂的模块；但有时候它又蠢得让人抓狂，甚至会一本正经地写出跑不通的代码，或者把你刚刚纠...</description></item><item><title>Gas Town 启示录：多智能体编排开启 AI 编程工业革命</title><link>https://tonybai.com/2026/01/25/gas-town-multi-agent-orchestration-ai-programming-revolution/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/25/gas-town-multi-agent-orchestration-ai-programming-revolution/</guid><description>本文永久链接 – https://tonybai.com/2026/01/25/gas-town-multi-agent-orchestration-ai-programming-revolution 大家好，我是Tony Bai。 &amp;gt; “启示录”（Apocalypse）在希腊语原意中并非仅指毁灭，更意味着“揭开面纱”。 2026 年的钟声敲响时，软件开发领域正经历着这样一场启示录。旧世界——那个...</description></item><item><title>Go 泛型落地 4 年后，终于要支持泛型方法了！</title><link>https://tonybai.com/2026/01/24/go-generics-finally-supports-generic-methods/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/24/go-generics-finally-supports-generic-methods/</guid><description>本文永久链接 – https://tonybai.com/2026/01/24/go-generics-finally-supports-generic-methods 大家好，我是Tony Bai。 &amp;gt; “我们预计 Go 永远不会添加泛型方法。” —— Go FAQ (曾几何时) 对于许多期待 Go 泛型能像 C++ 或 Java 那样强大的开发者来说，这句话曾像一盆冷水。然而，就在最近，Go ...</description></item><item><title>2025 Go 官方调查解读：91% 满意度背后的隐忧与 AI 时代的“双刃剑”</title><link>https://tonybai.com/2026/01/23/go-developer-2025-survey-result/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/23/go-developer-2025-survey-result/</guid><description>本文永久链接 – https://tonybai.com/2026/01/23/go-developer-2025-survey-result 大家好，我是Tony Bai。 近日，Go 官方发布了 2025 年开发者调查报告。作为 Go 社区的年度“体检报告”，这份基于 **5,379** 份有效问卷的数据，为我们勾勒出了一幅清晰的 Go 生态全景图。 总体来看，Go 依然是一个令人愉悦的语言，...</description></item><item><title>Kelsey Hightower 退休后的冷思考：为什么 10 年过去了，我们还在谈论容器？</title><link>https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age/</link><pubDate>Thu, 22 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age/</guid><description>本文永久链接 – https://tonybai.com/2026/01/22/why-are-we-still-talking-about-containers-in-ai-age 大家好，我是Tony Bai。 “如果你在 2014 年告诉我，十年后我们还在讨论容器，我会觉得你疯了。但现在是 2025 年，我们依然在这里，谈论着同一个话题。” 在去年中旬举行的 ContainerDays Ha...</description></item><item><title>凌晨3点的警报：一个导致 50000 多个 Goroutine 泄漏的 Bug 分析</title><link>https://tonybai.com/2026/01/22/a-bug-cause-50000-goroutine-leak/</link><pubDate>Thu, 22 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/22/a-bug-cause-50000-goroutine-leak/</guid><description>本文永久链接 – https://tonybai.com/2026/01/22/a-bug-cause-50000-goroutine-leak 大家好，我是Tony Bai。 内存占用 47GB，响应时间飙升至 32秒，Goroutine 数量达到惊人的 50847 个。 这是一个周六凌晨 3 点，发生在核心 API 服务上的真实噩梦。运维正准备重启服务止损，但 Serge Skoredin 敏...</description></item><item><title>从“手搓 Prompt”到“无限循环”：AI 编码的下一个形态是“Ralph”吗？</title><link>https://tonybai.com/2026/01/21/ai-coding-evolution-from-prompting-to-ralph/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/21/ai-coding-evolution-from-prompting-to-ralph/</guid><description>本文永久链接 – https://tonybai.com/2026/01/21/ai-coding-evolution-from-prompting-to-ralph 大家好，我是Tony Bai。 “如果你把 AI 放在一个死循环里，给它足够的权限和上下文，会发生什么？” 2025 年底，一个名为 **“Ralph Wiggum Technique” (Ralph 循环)** 的 AI 编程技巧...</description></item><item><title>当 Go 遇上 GPU：用 CUDA 释放千倍算力的实战指南</title><link>https://tonybai.com/2026/01/21/integrating-cuda-in-go/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/21/integrating-cuda-in-go/</guid><description>本文永久链接 – https://tonybai.com/2026/01/21/integrating-cuda-in-go 大家好，我是Tony Bai。 长期以来，高性能计算（HPC）和 GPU 编程似乎是 C++ 开发者的专属领地。Go 语言虽然在并发和服务端开发上表现卓越，但在触及 GPU 算力时，往往显得力不从心。 然而，在最近的 GopherCon 2025 上，软件架构师 Sam B...</description></item><item><title>AI 时代，Go 语言会“失宠”还是“封神”？—— GopherCon 2025 圆桌深度复盘</title><link>https://tonybai.com/2026/01/20/ai-and-go-opportunities-and-challenges/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/20/ai-and-go-opportunities-and-challenges/</guid><description>本文永久链接 – https://tonybai.com/2026/01/20/ai-and-go-opportunities-and-challenges 大家好，我是Tony Bai。 在 AI 的滔天巨浪面前，每一位 Go 开发者心中或许都曾闪过一丝不安：Python 似乎统治了一切，我的 Go 语言技能树还值钱吗？AI 会取代我写代码吗？我该如何在这个喧嚣的时代保持清醒？ 在 Gopher...</description></item><item><title>Go 语言的“魔法”时刻：如何用 -toolexec 实现零侵入式自动插桩？</title><link>https://tonybai.com/2026/01/19/unleashing-the-go-toolchain/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/19/unleashing-the-go-toolchain/</guid><description>本文永久链接 – https://tonybai.com/2026/01/19/unleashing-the-go-toolchain 大家好，我是Tony Bai。 “Go 语言以简洁著称，但在可观测性（Observability）领域，这种简洁有时却是一种负担。手动埋点、繁琐的初始化代码、版本升级带来的破坏性变更……这些都让 Gopher 们痛苦不已。 可观测性的三大支柱 相比之下，Java ...</description></item><item><title>Go 官方密码学原则：为什么 Go 的 Crypto 库难以被“用错”？</title><link>https://tonybai.com/2026/01/18/go-cryptography-principles/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/18/go-cryptography-principles/</guid><description>本文永久链接 – https://tonybai.com/2026/01/18/go-cryptography-principles 大家好，我是Tony Bai。 在软件工程领域，密码学（Cryptography）通常被视为“高危禁区”。大多数语言的建议都是“不要自己写密码学代码”，甚至“不要自己组合密码学原语”。 然而，Go 语言打破了这一魔咒。Go 的标准库 crypto/… 以及扩展库 g...</description></item><item><title>Tech Lead 不是管理者？一文看懂技术负责人的核心职责与能力模型</title><link>https://tonybai.com/2026/01/18/traits-of-a-good-tech-lead/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/18/traits-of-a-good-tech-lead/</guid><description>Tech Lead 不是管理者？一文看懂技术负责人的核心职责与能力模型 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专...</description></item><item><title>Go, Rust 还是 Zig？一场关于“简单”与“控制”的灵魂拷问</title><link>https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control/</guid><description>Go, Rust 还是 Zig？一场关于“简单”与“控制”的灵魂拷问 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏...</description></item><item><title>在 AI 时代主动“找虐”：为什么保留“认知摩擦”是你最后的护城河？</title><link>https://tonybai.com/2026/01/17/ai-era-cognitive-friction-as-your-last-moat/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/17/ai-era-cognitive-friction-as-your-last-moat/</guid><description>本文永久链接 – https://tonybai.com/2026/01/17/ai-era-cognitive-friction-as-your-last-moat 大家好，我是Tony Bai。 我们正在经历一场前所未有的知识通胀。 在 AI 时代，获取答案的成本已经降到了零。遇到 Bug？粘贴报错给 AI。写不出周报？给个主题让 AI 生成。想学新框架？让 AI 总结核心概念。 一切都变得无...</description></item><item><title>为什么 Go 社区强调避免不必要的抽象？—— 借用海德格尔哲学寻找“正确”的答案</title><link>https://tonybai.com/2026/01/16/go-community-the-right-kind-of-abstraction/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/16/go-community-the-right-kind-of-abstraction/</guid><description>本文永久链接 – https://tonybai.com/2026/01/16/go-community-the-right-kind-of-abstraction 大家好，我是Tony Bai。 **“Go 的哲学强调避免不必要的抽象。”** 这句话我们听过无数次。当你试图引入 ORM、泛型 Map/Reduce 、接口或者复杂的设计模式时，往往会收到这样的反馈。这句话本身没有错，但难点在于：*...</description></item><item><title>内存去哪儿了？一个让大多数 Gopher 都无法清晰回答的问题</title><link>https://tonybai.com/2026/01/15/where-did-the-memory-go-gopher-unanswered-question/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/15/where-did-the-memory-go-gopher-unanswered-question/</guid><description>本文永久链接 – https://tonybai.com/2026/01/15/where-did-the-memory-go-gopher-unanswered-question 大家好，我是Tony Bai。 &amp;gt; “我的服务内存又在缓慢增长了，pprof 显示不出明显的泄漏点……**内存到底去哪儿了？**” 这句午夜梦回的拷问，或许是许多 Go 开发者心中最深的恐惧。 这一切的根源，可能始于一...</description></item><item><title>Go 的“显式哲学”为何在接口上“食言”了？—— 探秘隐式接口背后的设计智慧</title><link>https://tonybai.com/2026/01/14/go-explicit-philosophy-implicit-interfaces-design-wisdom/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/14/go-explicit-philosophy-implicit-interfaces-design-wisdom/</guid><description>本文永久链接 – https://tonybai.com/2026/01/14/go-explicit-philosophy-implicit-interfaces-design-wisdom 大家好，我是Tony Bai。 “Go 倾向于显式、冗长的代码，而不是‘魔法’。那么，为什么接口实现却是**隐式**的呢？这让理解代码变得困难多了，简直让我抓狂。” 前不久，一位 Gopher 在 Redd...</description></item><item><title>当机器开始“剁手”：详解 Google UCP 与 Agentic Commerce 的架构革命</title><link>https://tonybai.com/2026/01/14/google-ucp-agentic-commerce-architecture-revolution/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/14/google-ucp-agentic-commerce-architecture-revolution/</guid><description>本文永久链接 – https://tonybai.com/2026/01/14/google-ucp-agentic-commerce-architecture-revolution 大家好，我是Tony Bai。 想象一下，未来的某一天，你们公司的电商网站流量突然暴涨了 1000 倍。 但奇怪的是，后台数据显示 PageView（页面浏览量）几乎为零，热力图一片空白，也没有任何用户在点击你的促销...</description></item><item><title>技术考古：Markdown 为何从博客工具演变成统治 AI 世界的“通用语”？</title><link>https://tonybai.com/2026/01/13/how-markdown-took-over-the-world/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/13/how-markdown-took-over-the-world/</guid><description>本文永久链接 – https://tonybai.com/2026/01/13/how-markdown-took-over-the-world 大家好，我是Tony Bai。 在这个由科技巨头主导、充斥着复杂算法和封闭生态的数字世界里，有一种技术显得格格不入。它没有专利壁垒，没有复杂的构建流程，甚至不需要特定的软件就能阅读。 它是 **Markdown**。 近期，知名科技博主 Anil Das...</description></item><item><title>像构建 Claude Code 一样构建应用：揭秘 Agent-native 架构的 5 大核心原则</title><link>https://tonybai.com/2026/01/13/agent-native-architecture/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/13/agent-native-architecture/</guid><description>本文永久链接 – https://tonybai.com/2026/01/13/agent-native-architecture 大家好，我是Tony Bai。 软件智能体（Software Agents）现在已经能够可靠地工作了。**Claude Code** 证明了，只要赋予一个大语言模型（LLM）访问 Bash 和文件系统的权限，并让它在一个循环中运行直到达成目标，它就能自主完成复杂的多步...</description></item><item><title>从入门到极致：VictoriaMetrics 教你写出最高效的 Go 代码</title><link>https://tonybai.com/2026/01/12/victoriametrics-guide-most-efficient-go-code/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/12/victoriametrics-guide-most-efficient-go-code/</guid><description>本文永久链接 – https://tonybai.com/2026/01/12/victoriametrics-guide-most-efficient-go-code 大家好，我是Tony Bai。 在 InfluxDB 转Rust 之后，**VictoriaMetrics** 迅速崛起，成为了 Go 生态中无可争议的第一时序数据库。凭借其惊人的写入性能、极低的内存占用以及对 Prometheu...</description></item><item><title>Go 的“浮点数陷阱”将被填平：浮点转整数即将在所有平台上行为一致</title><link>https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow/</guid><description>本文永久链接 – https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow 大家好，我是Tony Bai。 你是否知道，同一行简单的代码 int64(myFloat)，在 Intel (amd64) 机器上可能返回一个巨大的负数，而在 ARM64 机器上却可能返回最大正整...</description></item><item><title>代码之外的修炼：Google 资深工程师的 21 条“生存法则”</title><link>https://tonybai.com/2026/01/11/21-lessons-from-google-engineer/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/11/21-lessons-from-google-engineer/</guid><description>本文永久链接 – https://tonybai.com/2026/01/11/21-lessons-from-google-engineer 大家好，我是Tony Bai。 “当我 14 年前加入 Google 时，我以为这份工作就是写出优秀的代码……我只说对了一部分。我待得越久，就越意识到，那些真正茁壮成长的工程师，不一定是最好的程序员——他们是那些懂得如何驾驭代码**周围**一切的人：人、政...</description></item><item><title>离了大谱！Go 一年之内从第 7 掉到第 16</title><link>https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year/</guid><description>本文永久链接 – https://tonybai.com/2026/01/10/go-dropped-from-7th-to-16th-in-one-year 大家好，我是Tony Bai。 新年伊始，TIOBE 发布了最新的编程语言排行榜。当我满怀期待地去寻找 Go 的身影时，差点以为自己眼花了： **Go 居然从去年的第 7 名，断崖式下跌到了第 16 名！** 占比跌幅高达 1.37%，在这...</description></item><item><title>谁才是 Go 生态的“幕后之王”？—— 深度挖掘 4000 万个节点后的惊人发现</title><link>https://tonybai.com/2026/01/09/the-most-popular-go-dependency-is/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/09/the-most-popular-go-dependency-is/</guid><description>谁才是 Go 生态的“幕后之王”？—— 深度挖掘 4000 万个节点后的惊人发现 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * ...</description></item><item><title>PostgreSQL 吞噬世界，MongoDB 起诉 Go 开源项目：2025 数据库年度盘点</title><link>https://tonybai.com/2026/01/08/databases-in-2025-a-year-in-review/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/08/databases-in-2025-a-year-in-review/</guid><description>本文永久链接 – https://tonybai.com/2026/01/08/databases-in-2025-a-year-in-review 大家好，我是Tony Bai。 数据库领域的“毒舌”，CMU教授 Andy Pavlo 再次发布了他的年度回顾（虽然这次是站在 2026 年初的回望）。2025 年对于数据基础设施是疯狂的一年：PostgreSQL 继续确立其霸主地位，引发了巨头间的...</description></item><item><title>拆解 Claude Code：Coding Agent 终于“能用”背后的架构真相</title><link>https://tonybai.com/2026/01/08/how-claude-code-works/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/08/how-claude-code-works/</guid><description>本文永久链接 – https://tonybai.com/2026/01/08/how-claude-code-works 大家好，我是Tony Bai。 在过去两年里，我们见证了 AI Coding Agent的尴尬童年：从最初笨拙的 Copy-Paste，到 Cursor 的 VS Code Fork 革命，再到如今 Claude Code 这种 CLI Coding Agent的出现。 为什...</description></item><item><title>Go 语言的“舒适区”：为何在这张“鄙视链”金字塔中，Go 仅次于 C？</title><link>https://tonybai.com/2026/01/07/go-language-comfort-zone-in-contempt-chain-pyramid/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/07/go-language-comfort-zone-in-contempt-chain-pyramid/</guid><description>本文永久链接 – https://tonybai.com/2026/01/07/go-language-comfort-zone-in-contempt-chain-pyramid 大家好，我是Tony Bai。 最近，一张“编程语言分级图”在技术社区引发大家热议。它没有参考 TIOBE 排名，也不看 GitHub Star 数，而是完全基于一种简单粗暴的价值观：**谁最不折腾人？** 在这张金字...</description></item><item><title>别再“Vibe Coding”了：2025 年专业开发者是如何驾驭 Coding Agent的？</title><link>https://tonybai.com/2026/01/07/stop-vibe-coding-professional-developers-master-coding-agent-2025/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/07/stop-vibe-coding-professional-developers-master-coding-agent-2025/</guid><description>本文永久链接 – https://tonybai.com/2026/01/07/stop-vibe-coding-professional-developers-master-coding-agent-2025 大家好，我是Tony Bai。 在社交媒体上，我们经常看到这样的神话：“我用 AI Agent，只凭感觉（Vibe）就写出了整个应用，甚至不需要看代码。” 这种被称为“Vibe Codin...</description></item><item><title>别再盯着 go.sum 看了：它不是你想象中的那个 Lockfile</title><link>https://tonybai.com/2026/01/06/go-sum-is-not-a-lockfile/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/06/go-sum-is-not-a-lockfile/</guid><description>别再盯着 go.sum 看了：它不是你想象中的那个 Lockfile - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏...</description></item><item><title>耗时六个月，我为你画了一张通往“分布式架构师”的黄金地图</title><link>https://tonybai.com/2026/01/06/a-golden-map-to-distributed-architect/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/06/a-golden-map-to-distributed-architect/</guid><description>耗时六个月，我为你画了一张通往“分布式架构师”的黄金地图 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列...</description></item><item><title>Go 考古：图灵奖得主 Ken Thompson 亲述，Go 语言是如何在 C++ 的“废墟”上诞生的</title><link>https://tonybai.com/2026/01/05/how-ken-thompson-developed-go-language-at-google/</link><pubDate>Mon, 05 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/05/how-ken-thompson-developed-go-language-at-google/</guid><description>本文永久链接 – https://tonybai.com/2026/01/05/how-ken-thompson-developed-go-language-at-google. 大家好，我是Tony Bai。 为什么 Go 语言极其痛恨复杂的特性？为什么 Go 如此执着于编译速度？我们常说 Go 是一门“工程实用主义”的语言，它的设计哲学是“少即是多”。但你是否想过，这种近乎偏执的简洁，究竟是为...</description></item><item><title>刚刚，Claude Code 作者曝光了自己的“私房”配置：原来顶尖高手是这样用 AI 写代码的！</title><link>https://tonybai.com/2026/01/05/httpstonybai-com20260105claude-code-author-reveals-private-ai-coding-config/</link><pubDate>Mon, 05 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/05/httpstonybai-com20260105claude-code-author-reveals-private-ai-coding-config/</guid><description>本文永久链接 – https://tonybai.com/2026/01/05/claude-code-author-reveals-private-ai-coding-config 大家好，我是Tony Bai。 自从 Claude Code 发布以来，我和大家一样，都在探索这个“终端里的 AI 智能体”到底能爆发出多大的能量。 就在昨天，Claude Code 的创造者、Anthropic 的...</description></item><item><title>坚守内核，拥抱变量：我的 2025 年终复盘与 2026 展望</title><link>https://tonybai.com/2026/01/04/stick-to-the-core-embrace-variables-2025-review-2026-outlook/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/04/stick-to-the-core-embrace-variables-2025-review-2026-outlook/</guid><description>本文永久链接 – https://tonybai.com/2026/01/04/stick-to-the-core-embrace-variables-2025-review-2026-outlook 大家好，我是Tony Bai。 当时钟拨向 2026 年，我不禁回望刚刚过去的 2025。 在技术史上，这注定会被定义为**“分水岭”**的一年。如果说之前我们还在观望 AI 能画出什么样的图，生成...</description></item><item><title>让编译器成为你的副驾驶：告别“防御性编程”，拥抱“类型驱动开发”</title><link>https://tonybai.com/2026/01/04/stop-lying-to-the-compiler/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/04/stop-lying-to-the-compiler/</guid><description>本文永久链接 – https://tonybai.com/2026/01/04/stop-lying-to-the-compiler 大家好，我是Tony Bai。 “半夜被值班的运维同事叫醒，发现生产环境崩了，原因是一个深藏在业务逻辑里的 nil 指针异常。” 这个场景，对于每个后端开发者来说都是挥之不去的噩梦。事后复盘时，我们往往会懊恼：“为什么这里没加 if != nil 判断？”然后，我们...</description></item><item><title>为什么 AI 时代，C++ 和 Rust 反而更火了？Herb Sutter 的硬核解读</title><link>https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast/</guid><description>本文永久链接 – https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast 大家好，我是Tony Bai。 “软件拿走性能的速度，永远比硬件提供性能的速度要快。” 在 AI 狂热、Python 统治胶水层、硬件算力看似无限增长的今天，C++ 标准委员会主席 Herb Sutter 却抛出了一个反直觉的结论：**C++ ...</description></item><item><title>Kent Beck 最新思考：AI 时代的“一人派对”，代码审查的终结与重生</title><link>https://tonybai.com/2026/01/02/kent-beck-ai-era-code-review-end-and-rebirth/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/02/kent-beck-ai-era-code-review-end-and-rebirth/</guid><description>Kent Beck 最新思考：AI 时代的“一人派对”，代码审查的终结与重生 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的...</description></item><item><title>从“源码审计”到“能力审计”：Go 生态应对供应链攻击的范式转移</title><link>https://tonybai.com/2026/01/02/go-supply-chain-attack-source-code-to-capability-auditing-paradigm-shift/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/02/go-supply-chain-attack-source-code-to-capability-auditing-paradigm-shift/</guid><description>本文永久链接 – https://tonybai.com/2026/01/02/go-supply-chain-attack-source-code-to-capability-auditing-paradigm-shift 大家好，我是Tony Bai。 在软件供应链安全的传统认知中，我们默认遵循一个假设：“代码即真理”。如果你审查了 GitHub 上的源码，确认它是安全的，那么你部署的服务就应...</description></item><item><title>AI 是让你忘掉如何编程的最快方式</title><link>https://tonybai.com/2026/01/01/ai-is-the-fastest-way-to-forget-how-to-code/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/01/ai-is-the-fastest-way-to-forget-how-to-code/</guid><description>本文永久链接 – https://tonybai.com/2026/01/01/ai-is-the-fastest-way-to-forget-how-to-code 大家好，我是Tony Bai。 在 Copilot、Cursor、Claude Code等普及的这两年，编程似乎变得前所未有的轻松。 Tab 键一按，十行代码倾泻而出；回车一敲，整个函数自动补全；一个Prompt发出，一个项目的框架...</description></item><item><title>Go 考古：Go 官方如何决定支持你的 CPU 和 OS？</title><link>https://tonybai.com/2026/01/01/go-archaeology-porting-policy/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0800</pubDate><guid>https://tonybai.com/2026/01/01/go-archaeology-porting-policy/</guid><description>Go 考古：Go 官方如何决定支持你的 CPU 和 OS？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章...</description></item><item><title>Go 服务自省指南：抛弃 ldflags，让你的二进制文件“开口说话”</title><link>https://tonybai.com/2025/12/31/go-introspection-using-debug-buildinfo/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/31/go-introspection-using-debug-buildinfo/</guid><description>本文永久链接 – https://tonybai.com/2025/12/31/go-introspection-using-debug-buildinfo 大家好，我是Tony Bai。 在微服务和云原生时代，当我们面对线上服务的报警时，第一个问题往往不是“哪里出错了？”，而是——**“现在线上跑的到底是哪个版本？”** 在 Go 的蛮荒时代，我们习惯在 Makefile 里写上一长串 -ldf...</description></item><item><title>代码简单，人也简单？揭秘 Go 社区的“反内卷”文化</title><link>https://tonybai.com/2025/12/31/why-go-community-so-active-and-friendly/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/31/why-go-community-so-active-and-friendly/</guid><description>代码简单，人也简单？揭秘 Go 社区的“反内卷”文化 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 ...</description></item><item><title>Logging 已死？从“调试日记”到“结构化事件”的范式转移</title><link>https://tonybai.com/2025/12/30/logging-sucks/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/30/logging-sucks/</guid><description>本文永久链接 – https://tonybai.com/2025/12/30/logging-sucks 大家好，我是Tony Bai。 “传统的日志记录（Logging）已经死了。不是说我们不再需要记录信息，而是那种‘写日记’式的记录方式，在微服务和高并发时代，已经彻底破产。” 曾几何时，我们写日志就像写日记：按时间顺序，一行行记录程序跑到了哪儿，发生了什么。但在现代分布式系统中，一个请求可能...</description></item><item><title>高并发后端：坚守 Go，还是拥抱 Rust？</title><link>https://tonybai.com/2025/12/30/high-concurrency-backend-go-vs-rust/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/30/high-concurrency-backend-go-vs-rust/</guid><description>高并发后端：坚守 Go，还是拥抱 Rust？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 高并发后...</description></item><item><title>“为什么很多工程师还在无视 AI 编程？”—— 这里的答案，或许决定了你三年后的身价</title><link>https://tonybai.com/2025/12/29/why-many-software-engineers-still-ignore-ai-programming/</link><pubDate>Mon, 29 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/29/why-many-software-engineers-still-ignore-ai-programming/</guid><description>本文永久链接 – https://tonybai.com/2025/12/29/why-many-software-engineers-still-ignore-ai-programming 大家好，我是Tony Bai。 &amp;gt; “我注意到一件让我非常惊讶的事：似乎大多数软件工程师并没有充分利用（甚至根本不用）像 Claude Code、Cursor 或 GitHub Copilot 这样的 AI ...</description></item><item><title>告别 interface{} 模拟，Go 终于要有真正的 Union 类型了？</title><link>https://tonybai.com/2025/12/29/go-community-new-sum-type-end-interface-union-types/</link><pubDate>Mon, 29 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/29/go-community-new-sum-type-end-interface-union-types/</guid><description>本文永久链接 – https://tonybai.com/2025/12/29/go-community-new-sum-type-end-interface-union-types 大家好，我是Tony Bai。 &amp;gt; “Go 什么时候支持枚举？” &amp;gt; &amp;gt; “Go 什么时候有真正的联合类型？” 这可能是 Go 语言诞生以来，被问得最多的问题之一。现有的解决方案——无论是用 const 模拟枚举，还...</description></item><item><title>Bug 激增 1.7 倍！AI 写代码：是速度的蜜糖，还是质量的砒霜？</title><link>https://tonybai.com/2025/12/28/state-of-ai-vs-human-code-generation-report/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/28/state-of-ai-vs-human-code-generation-report/</guid><description>本文永久链接 – https://tonybai.com/2025/12/28/state-of-ai-vs-human-code-generation-report 大家好，我是Tony Bai。 &amp;gt; “天下武功，唯快不破。但在软件工程里，‘快’可能是致命的诱惑。” 2025 年，AI 编码助手/智能体已经成为开发者的标配。它像**蜜糖**一样，让我们尝到了开发效率飙升的甜头：从自然语言一键生成...</description></item><item><title>AI 代码审查的“危”与“机”：从个体挣扎到 Uber 的系统化解法</title><link>https://tonybai.com/2025/12/27/code-review-hell-in-ai-age/</link><pubDate>Sat, 27 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/27/code-review-hell-in-ai-age/</guid><description>本文永久链接 – https://tonybai.com/2025/12/27/code-review-hell-in-ai-age 大家好，我是Tony Bai。 最近，在与几位架构师朋友的交流中，一个在 AI 编码时代下越来越普遍的“灵魂拷问”浮出水面。这不仅是一个问题，更是他们正在亲身经历的“**代码审查地狱 (Code Review Hell)**”。 想象一下这个场景：由 AI Agen...</description></item><item><title>Rob Pike 罕见暴怒！痛斥 AI 公司的“伪善”致谢信，引爆技术圈</title><link>https://tonybai.com/2025/12/27/rob-pike-outburst-denounces-ai-companies-hypocritical-thanks/</link><pubDate>Sat, 27 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/27/rob-pike-outburst-denounces-ai-companies-hypocritical-thanks/</guid><description>本文永久链接 – https://tonybai.com/2025/12/27/rob-pike-outburst-denounces-ai-companies-hypocritical-thanks 大家好，我是Tony Bai。 “在这个圣诞节，我想对您过去四十年来对计算机领域的杰出贡献表达深深的感谢……” 这是一封看似温情脉脉、充满敬意的邮件，发件人是 **Claude Opus 4.5 A...</description></item><item><title>从工具到伙伴：Google 三巨头定义 2025 为“AI Agent 与推理元年”</title><link>https://tonybai.com/2025/12/26/google-2025-research-breakthroughs/</link><pubDate>Fri, 26 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/26/google-2025-research-breakthroughs/</guid><description>本文永久链接 – https://tonybai.com/2025/12/26/google-2025-research-breakthroughs 大家好，我是Tony Bai。 “2025 年，我们见证了人工智能从一种‘工具’向一种‘实用效能 (Utility)’的根本性转变。如果说 2024 年是奠定多模态基础的一年，那么 2025 年则是 AI 开始真正**思考、行动并与我们一同探索世界*...</description></item><item><title>像 Go 创始人一样思考：用五大思维原理重学 Go 语言</title><link>https://tonybai.com/2025/12/26/think-like-go-founders-relearn-go-five-principles/</link><pubDate>Fri, 26 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/26/think-like-go-founders-relearn-go-five-principles/</guid><description>本文永久链接 – https://tonybai.com/2025/12/26/think-like-go-founders-relearn-go-five-principles 大家好，我是Tony Bai。 学习一门新的编程语言时，我们常常陷入“是什么”的迷雾：goroutine 是什么？channel 是什么？interface 是什么？我们记忆语法，模仿示例，却很少追问那个更根本的问题——...</description></item><item><title>Go 的 AI 时代宣言：我们如何用“老”原则，解决“新”问题？</title><link>https://tonybai.com/2025/12/25/go-next-frontier-gophercon-2025/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/25/go-next-frontier-gophercon-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/12/25/go-next-frontier-gophercon-2025 大家好，我是Tony Bai。 “AI 正在重塑软件工程，但它并没有改变软件工程的本质。” 在 GopherCon 2025 上，Go 语言产品负责人 Cameron Balahan 发表了一场题为《Go 的下一个前沿领域》的主题演讲，重点关注了AI 时代...</description></item><item><title>Bash 虽好，但我选 Go：如何用 10 倍代码换来 100 倍的维护性？</title><link>https://tonybai.com/2025/12/24/bash-vs-go-10x-code-100x-maintainability/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/24/bash-vs-go-10x-code-100x-maintainability/</guid><description>本文永久链接 – https://tonybai.com/2025/12/24/bash-vs-go-10x-code-100x-maintainability 大家好，我是Tony Bai。 &amp;gt; “Bash 是一种很棒的胶水语言，但 Go 是更好的胶水。” 在日常开发中，我们经常会写一些 Bash 脚本来处理本地环境配置、启动 Docker 容器、同步密钥等琐碎任务。起初，它们只是几行简单的命令...</description></item><item><title>Go 性能分析的“新范式”：用关键路径分析破解高并发延迟谜题</title><link>https://tonybai.com/2025/12/24/profiling-request-latency-with-critical-path-analysis/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/24/profiling-request-latency-with-critical-path-analysis/</guid><description>本文永久链接 – https://tonybai.com/2025/12/24/profiling-request-latency-with-critical-path-analysis 大家好，我是Tony Bai。 “如果你喜欢快速的软件，那么你来对地方了。” 在 GopherCon 2025 上，来自 Datadog 的工程师、Go Performance and diagnostics小组...</description></item><item><title>告别“If-Else”地狱：OpenFeature 如何重塑 Go 应用的特性开关管理？</title><link>https://tonybai.com/2025/12/23/goodbye-if-else-hell-openfeature-feature-flag-management-go/</link><pubDate>Tue, 23 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/23/goodbye-if-else-hell-openfeature-feature-flag-management-go/</guid><description>本文永久链接 – https://tonybai.com/2025/12/23/goodbye-if-else-hell-openfeature-feature-flag-management-go 大家好，我是Tony Bai。 在软件开发的早期，我们都有过这样的经历：为了上线一个不确定的新功能，我们在代码里写下了： ``` if os.Getenv(&amp;#34;ENABLE_NEW_FEATURE&amp;#34;) ...</description></item><item><title>AI 还在写“老式 Go”？Alan Donovan 详解 Go 代码的现代化</title><link>https://tonybai.com/2025/12/22/alan-donovan-go-code-modernization/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/22/alan-donovan-go-code-modernization/</guid><description>本文永久链接 – https://tonybai.com/2025/12/22/alan-donovan-go-code-modernization 大家好，我是Tony Bai。 “Go 承诺了兼容性，但这并不意味着我们应该永远停留在过去。” 在 GopherCon 2025 上，Go 团队核心成员、静态分析工具专家 Alan Donovan 带来了一场题为《Analysis and Trans...</description></item><item><title>Go 1.26 的“加密风暴”：当 Hashicorp Vault 的合规需求，撞上 Go 团队的安全哲学</title><link>https://tonybai.com/2025/12/21/go-1-26-cryptographic-storm-vault-compliance-vs-go-security/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/21/go-1-26-cryptographic-storm-vault-compliance-vs-go-security/</guid><description>本文永久链接 – https://tonybai.com/2025/12/21/go-1-26-cryptographic-storm-vault-compliance-vs-go-security 大家好，我是Tony Bai。 近日，一个看似不起眼的 Go 语言issue，在社区引发了一场“地震级”的辩论。这场辩论的主角，一方是 Go 安全团队的灵魂人物 Filippo Valsorda，另一...</description></item><item><title>别演了，真实的程序员根本不修电脑：我们左手AI，右手星辰大海</title><link>https://tonybai.com/2025/12/21/real-programmers-dont-fix-computers-ai-stars-and-seas/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/21/real-programmers-dont-fix-computers-ai-stars-and-seas/</guid><description>本文永久链接 – https://tonybai.com/2025/12/21/real-programmers-dont-fix-computers-ai-stars-and-seas 大家好，我是Tony Bai。 最近陪家人看几部青春都市剧，实在忍不住想吐槽。 无论题材如何变，编剧笔下的程序员永远是那副德行：戴着黑框眼镜，背着双肩包，唯唯诺诺。而他们的戏份，似乎永远逃不开那一幕—— 男主角或...</description></item><item><title>AI 编码时代的生产力跃迁：2025 年开发者生态报告深度解读</title><link>https://tonybai.com/2025/12/20/ai-coding-era-productivity-leap-2025-developer-ecosystem-report/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/20/ai-coding-era-productivity-leap-2025-developer-ecosystem-report/</guid><description>本文永久链接 – https://tonybai.com/2025/12/20/ai-coding-era-productivity-leap-2025-developer-ecosystem-report 大家好，我是Tony Bai。 “如果你觉得今年的 PR (Pull Request) 变大了，你的感觉是对的。如果你觉得代码写得更快了，这也是对的。事实上，整个软件开发的节奏，正在被 AI ...</description></item><item><title>Goroutine “气泡”宇宙——Go 并发模型的新维度</title><link>https://tonybai.com/2025/12/20/goroutine-bubble-universe-go-concurrency-new-dimension/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/20/goroutine-bubble-universe-go-concurrency-new-dimension/</guid><description>本文永久链接 – https://tonybai.com/2025/12/20/goroutine-bubble-universe-go-concurrency-new-dimension 大家好，我是Tony Bai。 goroutine 是 Go 并发模型的基石，我们习惯于将其视为一个个轻量、独立的执行单元。然而，近年来，Go 语言中出现了一种新的、微妙的并发概念，Go 核心团队的成员们亲切地...</description></item><item><title>继 MCP 之后，Anthropic 再放大招：Agent Skills 正式发布为开放标准！</title><link>https://tonybai.com/2025/12/19/anthropic-agent-skills-open-standard-launch/</link><pubDate>Fri, 19 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/19/anthropic-agent-skills-open-standard-launch/</guid><description>本文永久链接 – https://tonybai.com/2025/12/19/anthropic-agent-skills-open-standard-launch 大家好，我是Tony Bai。 就在刚刚（美国时间2025年12月18日），Anthropic 正式宣布将 **Agent Skills** 发布为开放标准。 这是继2024年末推出 **MCP (Model Context Pro...</description></item><item><title>再见了，微服务：从 100 多个“问题儿童”到 1 个“超级巨星”的架构回归</title><link>https://tonybai.com/2025/12/19/twilio-say-goodbye-microservices/</link><pubDate>Fri, 19 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/19/twilio-say-goodbye-microservices/</guid><description>本文永久链接 – https://tonybai.com/2025/12/19/twilio-say-goodbye-microservices 大家好，我是Tony Bai。 “微服务”——这个在过去十年间统治了软件架构领域的“最佳实践”，承诺给我们带来更高的模块化、更快的迭代速度和更强的团队自治。然而，当一个团队，深陷于 140 多个服务、140 多个代码仓库、140 多个独立队列的泥潭中，开...</description></item><item><title>“这段代码是 AI 写的！”—— Go 社区的“AI 辅助编程”第一案</title><link>https://tonybai.com/2025/12/18/go-community-first-case-ai-assisted-programming/</link><pubDate>Thu, 18 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/18/go-community-first-case-ai-assisted-programming/</guid><description>本文永久链接 – https://tonybai.com/2025/12/18/go-community-first-case-ai-assisted-programming 大家好，我是Tony Bai。 近日，一场在 Go 官方 GitHub Issue 中爆发的公开“对峙”，将一个长期悬而未决的问题，以一种极具戏剧性的方式，推到了所有 Gopher 的面前：**我们应该如何对待 AI 生成的...</description></item><item><title>逃离 Java 的“自行车棚”：Go 语言真的是那片“净土”吗？</title><link>https://tonybai.com/2025/12/18/escaping-java-bicycle-shed-is-go-the-pure-land/</link><pubDate>Thu, 18 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/18/escaping-java-bicycle-shed-is-go-the-pure-land/</guid><description>本文永久链接 – https://tonybai.com/2025/12/18/escaping-java-bicycle-shed-is-go-the-pure-land 大家好，我是Tony Bai。 “如果每次我看到‘为什么不这么写？’这种针对完美代码的 PR 评论都能得到一分钱，我现在已经退休了。” 近日，一位在 r/golang 社区发帖的开发者发出了这样的咆哮。他受够了 Java 生态...</description></item><item><title>AI 编程的“90% 陷阱”：为什么你生成代码 1 分钟，修 Bug 却要 1 小时？</title><link>https://tonybai.com/2025/12/17/ai-programming-90-percent-trap-generation-vs-bug-fix/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/17/ai-programming-90-percent-trap-generation-vs-bug-fix/</guid><description>本文永久链接 – https://tonybai.com/2025/12/17/ai-programming-90-percent-trap-generation-vs-bug-fix 大家好，我是Tony Bai。 在 AI 辅助编程普及的第三年，我观察到一种奇怪的现象，我称之为**“AI 时代的开发疲劳”**。 很多开发者跟我抱怨： &amp;gt; “一开始觉得 AI 简直是神，几秒钟就能生成一个模块。但...</description></item><item><title>Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域，AI 流量激增！</title><link>https://tonybai.com/2025/12/17/cloudflare-2025-report-go-language-api-traffic-ai-surge/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/17/cloudflare-2025-report-go-language-api-traffic-ai-surge/</guid><description>本文永久链接 – https://tonybai.com/2025/12/17/cloudflare-2025-report-go-language-api-traffic-ai-surge 大家好，我是Tony Bai。 近日，互联网基础设施巨头 Cloudflare 发布了其备受瞩目的《2025 年度互联网回顾报告》。这份基于其全球庞大网络数据的报告，如同一面镜子，映照出全球互联网在流量、技术...</description></item><item><title>Go 1.26 新特性前瞻：从 Green Tea GC 到语法糖 new(expr)，性能与体验的双重进化</title><link>https://tonybai.com/2025/12/16/go-1-26-foresight/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/16/go-1-26-foresight/</guid><description>本文永久链接 – https://tonybai.com/2025/12/16/go-1-26-foresight 大家好，我是Tony Bai。 随着2025年11月末 Go 1.26 开发分支的功能冻结（Feature Freeze），这份预计于 2026 年初发布的版本终于揭开了神秘面纱。 回望刚刚过去的两年，Go 语言经历了一段密集的**“能力扩容期”**。从 Go 1.21 对结构化日志...</description></item><item><title>Go 语言的“反模式”清单：来自资深 Gopher 血泪教训的 10 条“不要做”</title><link>https://tonybai.com/2025/12/15/go-language-anti-patterns-10-donts/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/15/go-language-anti-patterns-10-donts/</guid><description>本文永久链接 – https://tonybai.com/2025/12/15/go-language-anti-patterns-10-donts 大家好，我是Tony Bai。 “有哪些‘不要做’的教训，是你花了好几年才学会的？” 近日，在 r/golang 社区，这个简单的问题，引爆了一场关于 Go 语言“反模式”与“最佳实践”的集体反思。帖子下数百条评论，汇集了无数 Gopher 在真实项...</description></item><item><title>你的大脑是 CPU，别让 AI 把它挂起 (WAIT)</title><link>https://tonybai.com/2025/12/14/dont-let-ai-put-your-brain-cpu-in-wait/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/14/dont-let-ai-put-your-brain-cpu-in-wait/</guid><description>本文永久链接 – https://tonybai.com/2025/12/14/dont-let-ai-put-your-brain-cpu-in-wait 大家好，我是Tony Bai。 先问一个扎心的问题：当你给 ChatGPT、Cursor 或 Claude Code 发送了一个复杂的 Prompt 之后，接下来的 30 秒到 1 分钟里，你在干什么？ 我观察过很多开发者，90% 的人是这样...</description></item><item><title>InfluxDB 3.0：一场豪赌的未来，还是又一次痛苦的轮回？</title><link>https://tonybai.com/2025/12/13/influxdb-3-0-grand-gamble-or-painful-cycle/</link><pubDate>Sat, 13 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/13/influxdb-3-0-grand-gamble-or-painful-cycle/</guid><description>InfluxDB 3.0：一场豪赌的未来，还是又一次痛苦的轮回？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 *...</description></item><item><title>跨越20年的对话：从 Eiffel 的“契约”到 Go 的“接口”</title><link>https://tonybai.com/2025/12/13/from-eiffel-contract-to-go-interface/</link><pubDate>Sat, 13 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/13/from-eiffel-contract-to-go-interface/</guid><description>本文永久链接 – https://tonybai.com/2025/12/13/from-eiffel-contract-to-go-interface 大家好，我是Tony Bai。 20年前，当我第一次翻开 Bertrand Meyer 的那本巨著**《面向对象软件构造》(Object-Oriented Software Construction)** 时，一种醍醐灌顶的感觉油然而生。书中那个...</description></item><item><title>Gin 真的是“真菌”吗？—— 一篇引发热议的“反 Gin”檄文解读</title><link>https://tonybai.com/2025/12/12/gin-is-a-very-bad-software-library/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/12/gin-is-a-very-bad-software-library/</guid><description>本文永久链接 – https://tonybai.com/2025/12/12/gin-is-a-very-bad-software-library 大家好，我是Tony Bai。 “Gin 就像是一种伪装成软件库的阴险真菌：它很容易感染，一旦沾上就几乎无法去除，除非你极其小心，否则还会传染给你的朋友。” 2025 年 12 月，Efron Licht 发布了一篇名为《Gin 是一个非常糟糕的软件...</description></item><item><title>Linus 的名言要改了：Talk is cheap, show me the Spec</title><link>https://tonybai.com/2025/12/12/talk-is-cheap-show-me-the-spec/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/12/talk-is-cheap-show-me-the-spec/</guid><description>本文永久链接 – https://tonybai.com/2025/12/12/talk-is-cheap-show-me-the-spec 大家好，我是Tony Bai。 在 IT 行业，有一句被奉为圭臬的名言，出自 Linux 之父 Linus Torvalds： &amp;gt; **“Talk is cheap, show me the code.”** &amp;gt; &amp;gt; (废话少说，放码过来。) 在过去的三十年...</description></item><item><title>Go 跌出 TIOBE 前十？别被排名骗了，这才是它的真实地位</title><link>https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language/</link><pubDate>Thu, 11 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language/</guid><description>本文永久链接 – https://tonybai.com/2025/12/11/is-golang-still-a-growing-programming-language 大家好，我是Tony Bai。 Go 语言是否已经触到了天花板？在 Python 借力 AI 狂飙突进、Rust 备受追捧的今天，Go 的位置究竟在哪里？近日，Twitch工程师 Melkey 结合 JetBrains、Sta...</description></item><item><title>Jepsen 报告震动 Go 社区：NATS JetStream 会丢失已确认写入</title><link>https://tonybai.com/2025/12/11/jepsen-report-nats-jetstream-data-loss-acknowledged-writes/</link><pubDate>Thu, 11 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/11/jepsen-report-nats-jetstream-data-loss-acknowledged-writes/</guid><description>本文永久链接 – https://tonybai.com/2025/12/11/jepsen-report-nats-jetstream-data-loss-acknowledged-writes 大家好，我是Tony Bai。 近日，一则重磅消息在 Go 社区引发了不小的震动。分布式系统领域的“终极拷问者”——**Jepsen**——发布了一份针对 Go 生态中流砥柱级消息系统 NATS 及其子...</description></item><item><title>“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈：Go 的诞生、演进与未来</title><link>https://tonybai.com/2025/12/10/russ-cox-interview-go-birth-evolution-future/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/10/russ-cox-interview-go-birth-evolution-future/</guid><description>本文永久链接 – https://tonybai.com/2025/12/10/russ-cox-interview-go-birth-evolution-future 大家好，我是Tony Bai。 他是 Go 语言的第二代掌门人，在长达十余年的时间里，引领着 Go 从一个内部实验项目，成长为云原生时代的霸主。他也是 Plan 9 的资深黑客，贝尔实验室精神的传承者。如今，他已将 Go 的帅印交...</description></item><item><title>Go 的“最小惊讶原则”破功了吗？—— 一个vet 新提案引发的思考</title><link>https://tonybai.com/2025/12/09/vet-add-check-for-using-verb-q/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/09/vet-add-check-for-using-verb-q/</guid><description>本文永久链接 – https://tonybai.com/2025/12/09/vet-add-check-for-using-verb-q 大家好，我是Tony Bai。 Go 语言的设计哲学，一向以“简单、明确、无魔法”著称，其目标是让代码的行为**尽可能符合开发者的直觉**，即遵循所谓的**“最小惊讶原则” (Principle of Least Astonishment)**。然而，最近一...</description></item><item><title>给了机关枪，你却非要耍大刀：2025 年末，程序员 All in AI 的生存启示录</title><link>https://tonybai.com/2025/12/09/programmer-all-in-ai-survival-revelation-in-2025/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/09/programmer-all-in-ai-survival-revelation-in-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/12/09/programmer-all-in-ai-survival-revelation-in-2025 大家好，我是Tony Bai。 最近逛 Twitter 和技术论坛，我发现了一个非常有意思，甚至有些魔幻的现象。 尽管我们已经站在了 **2025 年末**，距离 ChatGPT 震撼发布已经过去了整整三年，AI 能力早已...</description></item><item><title>拒绝“面条代码”，做有架构思维的 Go API 设计师</title><link>https://tonybai.com/2025/12/08/api-design-pattern-and-implementation/</link><pubDate>Mon, 08 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/08/api-design-pattern-and-implementation/</guid><description>本文永久链接 – https://tonybai.com/2025/12/08/api-design-pattern-and-implementation 大家好，我是Tony Bai。 在 Go 语言的圈子里摸爬滚打这么多年，我经常被问到这样一个问题： &amp;gt; “Tony，我已经熟悉了 Go 的语法，也会用 Gin 写增删改查（CRUD）了，为什么我写的 API 还是经常被前端吐槽？为什么业务逻辑稍...</description></item><item><title>“我从未想过学完 Rust 后会转向 Go”—— 这门“无聊”的语言究竟有什么魅力？</title><link>https://tonybai.com/2025/12/07/switching-from-rust-to-go-appeal-of-the-language/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/07/switching-from-rust-to-go-appeal-of-the-language/</guid><description>本文永久链接 – https://tonybai.com/2025/12/07/switching-from-rust-to-go-appeal-of-the-language 大家好，我是Tony Bai。 “我从未想过在学习 Rust 之后，我还会转而学习 Go。” 近日，开发者 Abhishek Singh 的一条推文，以其独特的、充满“诗意”的笔触，在开发者社区引发了广泛的共鸣和讨论。这句...</description></item><item><title>看完《疯狂动物城2》，我发现“完美架构”的谎言被戳破了</title><link>https://tonybai.com/2025/12/07/zootopia-2-perfect-architecture-lie-exposed/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/07/zootopia-2-perfect-architecture-lie-exposed/</guid><description>看完《疯狂动物城2》，我发现“完美架构”的谎言被戳破了 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表...</description></item><item><title>如果《疯狂动物城》是一个分布式系统，那它一定是用 Go 写的</title><link>https://tonybai.com/2025/12/06/zootopia-distributed-system-written-in-go/</link><pubDate>Sat, 06 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/06/zootopia-distributed-system-written-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/12/06/zootopia-distributed-system-written-in-go 大家好，我是Tony Bai。 **文章开始前，先给各位道个歉，今天的标题确实有点“党”。** 毕竟，非要说一个满是毛茸茸动物的动画片是用 Go 语言写的，这脑洞开得确实有点大。 但请原谅一个老程序员的“职业病”。 为了迎接本周末《疯狂...</description></item><item><title>Anthropic 内部报告：程序员的“死”与“生”，效率暴增 50% 的残酷启示</title><link>https://tonybai.com/2025/12/05/how-ai-is-transforming-work-at-anthropic/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/05/how-ai-is-transforming-work-at-anthropic/</guid><description>本文永久链接 – https://tonybai.com/2025/12/05/how-ai-is-transforming-work-at-anthropic 大家好，我是Tony Bai。 当我们还在争论 AI 编程是否是“玩具”时，Anthropic 已经把镜头对准了自己。 2025 年 8 月，这家打造了 Claude 的顶尖 AI 公司，对自己内部的 132 名工程师和研究员进行了一次深...</description></item><item><title>Go 安全新提案：runtime/secret 能否终结密钥残留的噩梦？</title><link>https://tonybai.com/2025/12/05/proposal-runtime-secret/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/05/proposal-runtime-secret/</guid><description>本文永久链接 – https://tonybai.com/2025/12/05/proposal-runtime-secret 大家好，我是Tony Bai。 “如果你的服务器被攻破，攻击者能否拿到内存中残留的私钥，进而解密过去两年的所有通信记录？” 这是一个让所有安全工程师夜不能寐的问题。为了防止这种情况，现代加密协议（如 TLS 1.3, WireGuard）都强调**前向保密 (Forwar...</description></item><item><title>MinIO 开源版突发“安乐死”：维护模式开启，社区愤怒，你的数据还安全吗？</title><link>https://tonybai.com/2025/12/04/minio-enter-maintenance-mode/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/04/minio-enter-maintenance-mode/</guid><description>本文永久链接 – https://tonybai.com/2025/12/04/minio-enter-maintenance-mode 大家好，我是Tony Bai。 “这个项目目前处于维护状态，不接受新的更改。” 近日，GitHub 上拥有近 60k Star、Go 语言生态中最著名的开源对象存储项目——MinIO，悄然修改了其 README。这一行看似平淡的声明，标志着 MinIO 开源版实...</description></item><item><title>别盲目梭哈 Agentic AI！先看清“确定性”的崩塌与“概率性”重建</title><link>https://tonybai.com/2025/12/04/thoughts-before-all-in-agentic-ai/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/04/thoughts-before-all-in-agentic-ai/</guid><description>本文永久链接 – https://tonybai.com/2025/12/04/thoughts-before-all-in-agentic-ai 大家好，我是Tony Bai。 如果你在 IT 行业待得够久，最近可能会有一种强烈的“既视感”。 现在的 AI 热潮，像极了当年的移动互联网元年。VC 们兴奋地喊着“所有行业都值得用 AI 重做一遍”。于是我们看到了 AI 版的 Office、AI 版...</description></item><item><title>Go 2025云原生与可观测年度报告：底层性能革新与生态固防</title><link>https://tonybai.com/2025/12/03/go-2025-cloud-native-observability-report/</link><pubDate>Wed, 03 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/03/go-2025-cloud-native-observability-report/</guid><description>本文永久链接 – https://tonybai.com/2025/12/03/go-2025-cloud-native-observability-report 大家好，我是Tony Bai。 **2025年，对于 Go 语言和云原生生态来说，是充满挑战与变革的一年。** 凭借务实的并发模型、极快的编译速度和极简的部署体验，Go 语言在过去十年间毫无争议地坐稳了现代云原生基础设施的“铁王座”。从...</description></item><item><title>只要 Title 带“工程师”，你就必须写代码：Uber 杰出工程师的硬核建议</title><link>https://tonybai.com/2025/12/02/advices-from-uber-distinguished-engineer/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/02/advices-from-uber-distinguished-engineer/</guid><description>只要 Title 带“工程师”，你就必须写代码：Uber 杰出工程师的硬核建议 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我...</description></item><item><title>Brad Fitzpatrick 也等不及了！sync.Map 的泛型进化与 sync/v2 的诞生之路</title><link>https://tonybai.com/2025/12/01/proposal-sync-v2/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/12/01/proposal-sync-v2/</guid><description>Brad Fitzpatrick 也等不及了！sync.Map 的泛型进化与 sync/v2 的诞生之路 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课...</description></item><item><title>Go 编译器崩溃背后：一个 append 函数引发的语言规范修正案</title><link>https://tonybai.com/2025/11/30/ice-assertion-failed-with-append/</link><pubDate>Sun, 30 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/30/ice-assertion-failed-with-append/</guid><description>本文永久链接 – https://tonybai.com/2025/11/30/ice-assertion-failed-with-append 大家好，我是Tony Bai。 在软件开发中，我们有时会遇到一些“显而易见”的错误。对于 Go 开发者而言，append 内建函数的第一个参数必须是切片，似乎就是这样一个“常识”。然而，当一个本应产生清晰编译错误的“常识性”错误，却导致了 Go 1.25...</description></item><item><title>“香蕉、猴子和整片丛林”：我们是否深陷于 OOP 的“优雅”陷阱？</title><link>https://tonybai.com/2025/11/29/oop-the-worst-thing-that-happened-to-programming/</link><pubDate>Sat, 29 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/29/oop-the-worst-thing-that-happened-to-programming/</guid><description>本文永久链接 – https://tonybai.com/2025/11/29/oop-the-worst-thing-that-happened-to-programming 大家好，我是Tony Bai。 Erlang 之父 Joe Armstrong 曾提出了一个关于面向对象编程（OOP）的、流传甚广的深刻比喻： **“你想要一根香蕉，但你得到的却是一只拿着香蕉的猴子，以及整片丛林。”** ...</description></item><item><title>Go 2026 路线图曝光：SIMD、泛型方法与无 C 工具链 CGO —— 性能与表达力的双重飞跃？</title><link>https://tonybai.com/2025/11/28/go-2026-roadmap-revealed/</link><pubDate>Fri, 28 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/28/go-2026-roadmap-revealed/</guid><description>本文永久链接 – https://tonybai.com/2025/11/28/go-2026-roadmap-revealed 大家好，我是Tony Bai。 在最近的一期 Go 编译器与运行时团队会议纪要中，我们惊喜地发现了一份关于 **2026 年的规划 (2026 planning，如下图)**。这份规划虽然简短，但其包含的信息量却足以让任何一位关注 Go 语言未来的开发者心跳加速。 从榨...</description></item><item><title>dingo：Go 语言的 “TypeScript”时刻？—— 一场由社区驱动的语言演进实验</title><link>https://tonybai.com/2025/11/27/dingo-go-typescript-moment/</link><pubDate>Thu, 27 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/27/dingo-go-typescript-moment/</guid><description>本文永久链接 – https://tonybai.com/2025/11/27/dingo-go-typescript-moment 大家好，我是Tony Bai。 Go 语言自诞生以来，以其极简主义哲学（Simplicity）赢得了全球开发者的青睐。然而，这种极简也伴随着长期的痛点： * 满屏的 if err != nil。 * 缺失的和类型（Sum Types/Enums），导致状态表达含糊。...</description></item><item><title>13万节点！Google 如何打破 Kubernetes 的物理极限，构建全球最大集群</title><link>https://tonybai.com/2025/11/26/how-google-built-a-130000-node-k8s-cluster/</link><pubDate>Wed, 26 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/26/how-google-built-a-130000-node-k8s-cluster/</guid><description>本文永久链接 – https://tonybai.com/2025/11/26/how-google-built-a-130000-node-k8s-cluster 大家好，我是Tony Bai。 Kubernetes 的官方支持上限通常被认为是 5,000 到 15,000 节点。然而，在 AI 时代的算力军备竞赛中，这个数字显得有些“捉襟见肘”。 近日，Google Cloud 发布了一份重磅...</description></item><item><title>谁“杀”死了你的 HTTP 连接？—— 揭秘云环境下连接池配置的隐形陷阱</title><link>https://tonybai.com/2025/11/25/who-killed-your-http-connection-traps-of-connection-pooling/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/25/who-killed-your-http-connection-traps-of-connection-pooling/</guid><description>本文永久链接 – https://tonybai.com/2025/11/25/who-killed-your-http-connection-traps-of-connection-pooling 大家好，我是Tony Bai。 你是否在生产环境中遇到过偶现的 EOF、connection reset by peer 或 unexpected end of stream 错误？ 你是否检查了代码...</description></item><item><title>霸榜 GitHub 一周！Google 开源 ADK for Go，彻底终结 AI“炼丹”时代？</title><link>https://tonybai.com/2025/11/24/google-adk-go-in-action/</link><pubDate>Mon, 24 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/24/google-adk-go-in-action/</guid><description>本文永久链接 – https://tonybai.com/2025/11/24/google-adk-go-in-action 大家好，我是Tony Bai。 上周，我花了一个下午，仅仅是为了让一个Python写的Agent能稳定地调用我Go服务里的一个简单函数。在那一刻，看着屏幕上纠缠的gRPC、Python虚拟环境和混乱的日志，我脑海里只有一个念头：这不对劲，这绝对不是软件工程该有的样子！ 显...</description></item><item><title>白天改Bug，晚上刷视频：你以为在放松，其实在消耗你写出好代码的能力</title><link>https://tonybai.com/2025/11/23/short-form-videos-harm-programmers/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/23/short-form-videos-harm-programmers/</guid><description>本文永久链接 – https://tonybai.com/2025/11/23/short-form-videos-harm-programmers 大家好，我是Tony Bai。 我想请你回想一个再熟悉不过的场景： 白天，你在成千上万行代码的丛林里艰难跋涉，与一个隐藏极深的Bug缠斗了数个小时，心力交瘁。晚上回到家，你只想“犒劳”一下疲惫的大脑，于是瘫倒在沙发或舒服的大床上，划开手机，沉浸在短视...</description></item><item><title>从韩立到梅西：顶级“全栈工程师”的修炼之道与生存哲学</title><link>https://tonybai.com/2025/11/23/leo-messi-and-fanren-hanli/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/23/leo-messi-and-fanren-hanli/</guid><description>从韩立到梅西：顶级“全栈工程师”的修炼之道与生存哲学 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 ...</description></item><item><title>Go 2025 密码学年度报告：后量子时代的防御与 FIPS 的“纯 Go”革命</title><link>https://tonybai.com/2025/11/22/the-2025-go-cryptography-state-of-the-union/</link><pubDate>Sat, 22 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/22/the-2025-go-cryptography-state-of-the-union/</guid><description>本文永久链接 – https://tonybai.com/2025/11/22/the-2025-go-cryptography-state-of-the-union 大家好，我是Tony Bai。 2025 年 8 月，Go 官方密码学库核心维护者、Geomys 创始人 **Filippo Valsorda** 在 GopherCon US 上发表了备受瞩目的年度主题演讲 —— “The Go ...</description></item><item><title>为什么 Go 在悄悄地做 Rust 做不到的事：保持简单</title><link>https://tonybai.com/2025/11/21/why-go-is-quietly-doing-what-rust-couldnt-staying-simple/</link><pubDate>Fri, 21 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/21/why-go-is-quietly-doing-what-rust-couldnt-staying-simple/</guid><description>本文永久链接 – https://tonybai.com/2025/11/21/why-go-is-quietly-doing-what-rust-couldnt-staying-simple 大家好，我是Tony Bai。 近日，一篇题为《为什么 Zig 在悄悄地做 Rust 做不到的事：保持简单》的文章在开发者社区引发了热议。文章以其辛辣、富有煽动性的文风，将 Zig 描绘成 Rust 复杂性...</description></item><item><title>Goroutine 栈增长机制新提案：用缺页中断替代栈检查？Rob Pike 亲自下场“劝退”</title><link>https://tonybai.com/2025/11/20/proposal-improve-goroutine-stack-using-page-faults/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/20/proposal-improve-goroutine-stack-using-page-faults/</guid><description>本文永久链接 – https://tonybai.com/2025/11/20/proposal-improve-goroutine-stack-using-page-faults 大家好，我是Tony Bai。 Go 语言的 goroutine 以其轻量和高效著称，而其背后一个关键的“魔法”便是**可动态增长的栈 (Resizable Stacks)**。然而，支撑这个魔法的机制——在几乎每个函...</description></item><item><title>还在当“上下文搬运工”？我写了一门课，帮你重塑AI开发工作流</title><link>https://tonybai.com/2025/11/20/ai-native-dev-workflow/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/20/ai-native-dev-workflow/</guid><description>本文永久链接 – https://tonybai.com/2025/11/20/ai-native-dev-workflow 大家好，我是Tony Bai。 最近半年，我发现我的开发日常，正被一种新的“工作流摩擦”所困扰。 我猜，你可能也感同身受。 我们在一块屏幕上沉浸于IDE中的Go代码，在另一块屏幕上，则像一个勤奋的“学生”，不断向AI大模型提问。我们从代码库中精心挑选上下文，复制，切换窗口，...</description></item><item><title>Go 泛型再进化：移除类型参数的循环引用限制</title><link>https://tonybai.com/2025/11/19/proposal-remove-cycle-restriction-for-type-parameters/</link><pubDate>Wed, 19 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/19/proposal-remove-cycle-restriction-for-type-parameters/</guid><description>本文永久链接 – https://tonybai.com/2025/11/19/proposal-remove-cycle-restriction-for-type-parameters 大家好，我是Tony Bai。 自 Go 1.18 引入泛型以来，Gopher 们一直在探索其能力的边界。然而，在这片新大陆上，一直存在着一个由语言规范施加的限制，它禁止了一种强大而富有表达力的泛型模式的实现。 ...</description></item><item><title>一次 unwrap() 引发的全球宕机：Cloudflare 故障报告背后的 Rust 安全反思</title><link>https://tonybai.com/2025/11/19/cloudflare-18-november-2025-outage/</link><pubDate>Wed, 19 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/19/cloudflare-18-november-2025-outage/</guid><description>本文永久链接 – https://tonybai.com/2025/11/19/cloudflare-18-november-2025-outage 大家好，我是Tony Bai。 2025 年 11 月 18 日，世界标准时间(UTC) 11:20，支撑着全球大量互联网流量的 Cloudflare 网络开始出现严重故障。无数网站和应用的用户，开始频繁地看到那令人心悸的“Internal Serv...</description></item><item><title>Go 在 Web3 的统治力：2025 年架构与生态综述</title><link>https://tonybai.com/2025/11/18/go-web3-dominance-overview-2025/</link><pubDate>Tue, 18 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/18/go-web3-dominance-overview-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/11/18/go-web3-dominance-overview-2025 大家好，我是Tony Bai。 截至 2025 年末，Go 语言 (Golang) 作为**基础设施主导语言 (Infrastructure Dominance Language)**，在 Web3 生态系统中的地位已然根深蒂固。Go 的架构特性——特别是...</description></item><item><title>你的 Go 测试，还停留在“演员对台词”吗？</title><link>https://tonybai.com/2025/11/17/go-testing-journey/</link><pubDate>Mon, 17 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/17/go-testing-journey/</guid><description>本文永久链接 – https://tonybai.com/2025/11/17/go-testing-journey 大家好，我是Tony Bai。 我想请大家想象一个场景： 周五下午五点，你刚刚修复了一个看似无关紧要的 bug，怀着对周末的憧憬，合并了你的代码。CI/CD 流水线一片绿灯，部署顺利完成。 突然，运维在工作群里 @ 了你：“紧急！新版本上线后，核心的用户注册功能好像挂了！” 你心里...</description></item><item><title>你的 Kubernetes 知识在“冰山”的第几层？—— 一份给 Gopher 的 K8s 进阶“航海图”</title><link>https://tonybai.com/2025/11/17/explain-kubernetes/</link><pubDate>Mon, 17 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/17/explain-kubernetes/</guid><description>本文永久链接 – https://tonybai.com/2025/11/17/explain-kubernetes 大家好，我是Tony Bai。 近日，一张关于 Kubernetes 知识体系的“冰山图”在开发者社区广为流传。它以一种戏谑而又无比真实的方式，描绘了从入门到精通 K8s 所需跨越的深邃鸿沟。 对于我们 Gopher 而言，这张图有着非凡的意义。因为 Kubernetes 这座宏伟...</description></item><item><title>Go 的甜蜜16 岁：一份来自官方的年度成绩单与未来路线图</title><link>https://tonybai.com/2025/11/15/go-turns-16/</link><pubDate>Sat, 15 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/15/go-turns-16/</guid><description>本文永久链接 – https://tonybai.com/2025/11/15/go-turns-16 大家好，我是Tony Bai。 今年的 Go 官方16岁“庆生”文章，来得比以往时候都要晚一些。 往年，我们总能在 11 月 10 日或 11 日，准时收到这份来自 Go 团队的年度“家庭来信”。但今年，日历翻过了好几天，官方博客却依旧静悄悄。前几天，我还在知识星球上和星友们“抱怨”：“今年 G...</description></item><item><title>Go 也开始“叛逆”了？深度解读 JetBrains 2025 报告：为何“原生信仰”不再是唯一答案</title><link>https://tonybai.com/2025/11/14/the-go-ecosystem-in-2025/</link><pubDate>Fri, 14 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/14/the-go-ecosystem-in-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/11/14/the-go-ecosystem-in-2025 大家好，我是Tony Bai。 Go 语言迎来了它的第 16 个年头。从一个旨在解决 Google 内部工程效率问题的项目，成长为拥有超过 500 万开发者的全球性技术力量，16 岁的 Go 已然进入了一个成熟、稳健的“少年时代”。 在这个值得纪念的里程碑时刻，我们不禁...</description></item><item><title>PGO 驱动的“动态逃逸分析”：w.Write(b) 中的切片逃逸终于有救了？</title><link>https://tonybai.com/2025/11/13/proposal-dynamic-escapes/</link><pubDate>Thu, 13 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/13/proposal-dynamic-escapes/</guid><description>本文永久链接 – https://tonybai.com/2025/11/13/proposal-dynamic-escapes 大家好，我是Tony Bai。 io.Writer，这个在 Go 语言中无处不在的神圣接口，其背后却隐藏着一个困扰了性能敏感型开发者多年的“隐形成本”。当你将一个在函数内创建的字节切片 b 传递给 w.Write(b) 时，这个切片几乎总是会**逃逸 (Escape)*...</description></item><item><title>Go 的 16 年：一门为持久而生的编程语言</title><link>https://tonybai.com/2025/11/12/16-years-of-go-a-programming-language-built-to-last/</link><pubDate>Wed, 12 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/12/16-years-of-go-a-programming-language-built-to-last/</guid><description>本文永久链接 – https://tonybai.com/2025/11/12/16-years-of-go-a-programming-language-built-to-last 大家好，我是Tony Bai。 每年的十一月，对于全球的 Gopher 而言，都是一个值得纪念的特殊时刻。今年，我们迎来了 Go 语言公开发布的第 16 个年头。 在众多的庆祝文章中，来自 Go 社区的知名组织 Ar...</description></item><item><title>“学习 Go 毁掉了我钟爱的其他语言”：一场网络热议揭示 Go 开发者真正的爱与痛</title><link>https://tonybai.com/2025/11/11/go-developers-love-pain-online-debate/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/11/go-developers-love-pain-online-debate/</guid><description>本文永久链接 – https://tonybai.com/2025/11/11/go-developers-love-pain-online-debate 大家好，我是Tony Bai。 近日，一条开发者 Mario Verbelen 发布的推文——“学习 Go 毁掉了我钟爱的其他语言，但我不在乎。因为它真的太棒了。”——意外地在技术圈引起了一场关于 Go 语言的集中讨论。上百的开发者涌入评论区，...</description></item><item><title>算了一笔账后，这个双十一我决定做个“亏本”买卖</title><link>https://tonybai.com/2025/11/11/zsxq-11-11-2025/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/11/zsxq-11-11-2025/</guid><description>算了一笔账后，这个双十一我决定做个“亏本”买卖 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 算了一...</description></item><item><title>来自 Go 创始人的忠告：这五条关于“复杂性”的法则，比算法更重要</title><link>https://tonybai.com/2025/11/10/rob-pike-on-complexity/</link><pubDate>Mon, 10 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/10/rob-pike-on-complexity/</guid><description>本文永久链接 – https://tonybai.com/2025/11/10/rob-pike-on-complexity 大家好，我是Tony Bai。 在软件工程的殿堂里，我们常常将算法和数据结构奉为圭臬。我们痴迷于时间复杂度的优化，热衷于讨论各种精巧的数据结构。然而，Go 语言的联合创始人 Rob Pike 早在其1989年的一篇C 语言编程笔记中，就为我们留下了一份更根本的“忠告”。这份...</description></item><item><title>Go 标准库将迎来 Zstandard：性能超越 Gzip，让你的应用更快、更省</title><link>https://tonybai.com/2025/11/08/proposal-zstd/</link><pubDate>Sat, 08 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/08/proposal-zstd/</guid><description>本文永久链接 – https://tonybai.com/2025/11/08/proposal-zstd 大家好，我是Tony Bai。 在 Go 的世界里，一项被社区翘首以盼的提案在沉寂一年后，终于迎来了决定性的进展。2024 年，将 Zstandard 压缩算法纳入标准库的提案（#62513）被正式 **Accept**，但在那之后便鲜有动静。直到最近的 Go 编译器与运行时会议纪要中透露，...</description></item><item><title>Go 的“简单”幻象：易于上手，难于精通</title><link>https://tonybai.com/2025/11/07/go-simple-illusion-easy-to-learn-hard-to-master/</link><pubDate>Fri, 07 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/07/go-simple-illusion-easy-to-learn-hard-to-master/</guid><description>本文永久链接 – https://tonybai.com/2025/11/07/go-simple-illusion-easy-to-learn-hard-to-master 大家好，我是Tony Bai。 “Go 语言看起来如此简单，我的这种假设是错的吗？” 近日，一位刚接触 Go 几个月的新手在reddit golang论坛发出了这样一个真诚的提问。他感觉 Go “超级简单”，并好奇自己是否因...</description></item><item><title>连 Rob Pike 都感到“担忧”：Go 1.26 SIMD 引入的新复杂性与应对之道</title><link>https://tonybai.com/2025/11/06/proposal-simd-cpu-feature-vet-check/</link><pubDate>Thu, 06 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/06/proposal-simd-cpu-feature-vet-check/</guid><description>本文永久链接 – https://tonybai.com/2025/11/06/proposal-simd-cpu-feature-vet-check 大家好，我是Tony Bai。 Go 1.26 将于11月份功能特性冻结，其最令人期待的实验特性之一，无疑是simd 包的引入。它承诺为 Go 开发者解锁 SIMD (Single Instruction, Multiple Data) 的强大能力...</description></item><item><title>GODEBUG 的“技术债”清算：Go 团队提出全新生命周期管理策略</title><link>https://tonybai.com/2025/11/05/proposal-remove-godebug-flags/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/05/proposal-remove-godebug-flags/</guid><description>本文永久链接 – https://tonybai.com/2025/11/05/proposal-remove-godebug-flags 大家好，我是Tony Bai。 自 2012 年 Go 1 发布以来，“向后兼容性” (Go 1 compatibility guarantee) 不仅是一份承诺，更是 Go 语言赢得全球开发者信任的基石。然而，为了在不违背这份承诺的前提下修复 bug、引入新...</description></item><item><title>微服务灾难清单：从技术深坑到组织泥潭的 10 个惨痛教训</title><link>https://tonybai.com/2025/11/04/microservice-disasters/</link><pubDate>Tue, 04 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/04/microservice-disasters/</guid><description>本文永久链接 – https://tonybai.com/2025/11/04/microservice-disasters 大家好，我是Tony Bai。 2014 年，当 Martin Fowler 发表那篇定义性的文章后，“微服务”就从一个架构理念，迅速演变为席卷全球软件行业的技术浪潮。它承诺将庞大、笨重的单体应用，分解为小而美的、可独立开发和部署的服务，从而极大地提升团队的敏捷性和交付速度...</description></item><item><title>Go GUI 开发的“绝境”与“破局”：2025 年现状与展望</title><link>https://tonybai.com/2025/11/03/go-gui-development-2025/</link><pubDate>Mon, 03 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/03/go-gui-development-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/11/03/go-gui-development-2025 大家好，我是Tony Bai。 “Go 语言能写桌面应用吗？” 这个问题，如同一个幽灵，常年盘旋在 Go 社区的上空。作为一门在后端、云原生和命令行工具领域所向披靡的语言，Go 在图形用户界面（GUI）开发上的“短板”，一直是其支持者心中一个难以言说的痛。 长期以来，Go...</description></item><item><title>“6 个月，47 个微服务”：一场由“简历驱动”引发的架构灾难</title><link>https://tonybai.com/2025/11/02/6-months-47-microservices-architecture-disaster/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/02/6-months-47-microservices-architecture-disaster/</guid><description>本文永久链接 – https://tonybai.com/2025/11/02/6-months-47-microservices-architecture-disaster 大家好，我是Tony Bai。 &amp;gt; “我们有一个运行了 8 年的 Python 单体应用，20 万行代码，工作得很好，很少崩溃，8 分钟就能部署。现在，新来的首席架构师，入职仅 3 个月，就要我们在 6 个月内，把它拆分成 ...</description></item><item><title>从 Python 到 Go：我们失去了什么，又得到了什么？</title><link>https://tonybai.com/2025/11/01/from-python-to-go-what-we-lost-and-gained/</link><pubDate>Sat, 01 Nov 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/11/01/from-python-to-go-what-we-lost-and-gained/</guid><description>本文永久链接 – https://tonybai.com/2025/11/01/from-python-to-go-what-we-lost-and-gained 大家好，我是Tony Bai。 在当代软件工程师的职业生涯中，从一门动态语言（如 Python）转向一门静态语言（如 Go），已成为一条日益普遍的技术迁徙路径。这条路充满了新奇的发现，也伴随着对旧日“舒适区”的丝丝怀念。 近日，在 r/...</description></item><item><title>Go 官方详解“Green Tea”垃圾回收器：从对象到页，一场应对现代硬件挑战的架构演进</title><link>https://tonybai.com/2025/10/31/deep-into-go-green-tea-gc/</link><pubDate>Fri, 31 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/31/deep-into-go-green-tea-gc/</guid><description>本文永久链接 – https://tonybai.com/2025/10/31/deep-into-go-green-tea-gc 大家好，我是Tony Bai。 关注 Go 语言演进的 Gopher 们可能已经注意到，Go 团队更换技术负责人以来，对运行时 (runtime) 和编译器 (compiler) 核心组件的打磨正日益成为团队的工作重心。从备受期待的“绿茶”GC (Green Tea ...</description></item><item><title>Rust 布道者Jon Gjengset深度访谈：在 AI 时代，我们该如何思考编程、职业与未来？</title><link>https://tonybai.com/2025/10/30/jon-gjengset-rust-ai-future/</link><pubDate>Thu, 30 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/30/jon-gjengset-rust-ai-future/</guid><description>本文永久链接 – https://tonybai.com/2025/10/30/jon-gjengset-rust-ai-future 大家好，我是Tony Bai。 他是 MIT 的博士，Rust 社区的知名布道者，《Rust for Rustaceans》作者，前亚马逊首席工程师，现欧洲顶尖 AI 防务公司 Helsing 的首席工程师。Jon Gjengset 的履历，本身就是一部现代软件工...</description></item><item><title>告别懵圈：实战派 Gopher 的类型理论入门</title><link>https://tonybai.com/2025/10/30/type-theory-intro-for-gopher/</link><pubDate>Thu, 30 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/30/type-theory-intro-for-gopher/</guid><description>本文永久链接 – https://tonybai.com/2025/10/30/type-theory-intro-for-gopher 大家好，我是Tony Bai。 你是否曾有过这样的经历：在浏览一个关于 Go 泛型或接口设计的 GitHub issue 或技术提案时，评论区里的大佬们突然开始讨论 “Sum Type”、“Product Type”、“Parametric Polymorphi...</description></item><item><title>解构Go函数迭代器——为什么 break 没有按预期工作？</title><link>https://tonybai.com/2025/10/29/why-break-in-go-function-iterators-does-not-work/</link><pubDate>Wed, 29 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/29/why-break-in-go-function-iterators-does-not-work/</guid><description>本文永久链接 – https://tonybai.com/2025/10/29/why-break-in-go-function-iterators-does-not-work 大家好，我是Tony Bai。 在我的极客时间专栏《Tony Bai·Go语言进阶课》的关于 Go 1.23+ 函数迭代器的第9讲中，我介绍了一种非常强大的高级用法——**迭代器组合 (Iterator Compositi...</description></item><item><title>Go 考古：错误处理的“语法糖”之战与最终的“投降”</title><link>https://tonybai.com/2025/10/28/go-archaeology-error-handling/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/28/go-archaeology-error-handling/</guid><description>本文永久链接 – https://tonybai.com/2025/10/28/go-archaeology-error-handling 大家好，我是Tony Bai。 if err != nil，这可能是 Go 语言中最具辨识度，也最富争议性的代码片段。它如同一块磐石，奠定了 Go 错误处理哲学的基石，但也因其“繁琐”而常年位居 Go 开发者年度调查“最不满意特性”榜首。 许多新入门的 Gop...</description></item><item><title>Go 模块构建与依赖管理：我们到底在“折腾”什么？</title><link>https://tonybai.com/2025/10/27/the-ultimate-guide-to-go-module/</link><pubDate>Mon, 27 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/27/the-ultimate-guide-to-go-module/</guid><description>Go 模块构建与依赖管理：我们到底在“折腾”什么？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 G...</description></item><item><title>SQLite 对 Go 和 Rust 说“不”：揭示“安全语言”光环下的工程现实</title><link>https://tonybai.com/2025/10/26/sqlite-say-no-to-go-and-rust/</link><pubDate>Sun, 26 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/26/sqlite-say-no-to-go-and-rust/</guid><description>本文永久链接 – https://tonybai.com/2025/10/26/sqlite-say-no-to-go-and-rust 大家好，我是Tony Bai。1024程序员节赠书活动火热进行中，希望大家踊跃参与，赢取自己的幸运！ 在当今的软件工程界，“内存安全”已成为一种近乎道德正确的政治正确。Go 和 Rust 等现代“安全语言”，凭借其在编译期消除一整类危险 Bug 的能力，被誉为是...</description></item><item><title>Go 的 iota：设计缺陷还是“黑魔法”？—— 从一条“咆哮”推文谈起</title><link>https://tonybai.com/2025/10/25/go-iota-flaw-or-magic/</link><pubDate>Sat, 25 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/25/go-iota-flaw-or-magic/</guid><description>本文永久链接 – https://tonybai.com/2025/10/25/go-iota-flaw-or-magic 大家好，我是Tony Bai。 “我一直在 DUNK Go，因为我觉得它是一门糟糕的语言。但我从未意识到，它比无底的绝望深渊还要深。这TMD是啥？” 近日，一条关于 Go 语言 iota 的“咆哮”推文在开发者社区引发了热议。推文作者 Dmitrii Kovanikov 贴出...</description></item><item><title>从《凡人修仙传》到《三体》：顶尖程序员的“降维打击”与“法则”之力</title><link>https://tonybai.com/2025/10/24/from-fanren-to-three-body-top-programmers-power/</link><pubDate>Fri, 24 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/24/from-fanren-to-three-body-top-programmers-power/</guid><description>本文永久链接 – https://tonybai.com/2025/10/24/from-fanren-to-three-body-top-programmers-power 大家好，我是Tony Bai。 在上篇文章中，我们论道了程序员的修仙境界。但一个更深层的问题随之而来：决定一个修士（程序员）最终高度的，究竟是什么？是掌握了更多华丽的“法术”（框架/工具），还是洞悉了其背后的“天地法则”（底...</description></item><item><title>致敬 1024 程序员节：写给奔跑在二进制世界里的你 (文末赠书)</title><link>https://tonybai.com/2025/10/24/honoring-1024-programmers-day/</link><pubDate>Fri, 24 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/24/honoring-1024-programmers-day/</guid><description>致敬 1024 程序员节：写给奔跑在二进制世界里的你 (文末赠书) - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 ...</description></item><item><title>Go FFI 的新范式：purego 与 libffi 如何让我们无痛拥抱 C 生态</title><link>https://tonybai.com/2025/10/23/go-ffi-new-paradigm/</link><pubDate>Thu, 23 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/23/go-ffi-new-paradigm/</guid><description>本文永久链接 – https://tonybai.com/2025/10/23/go-ffi-new-paradigm 大家好，我是Tony Bai。 import “C”，这行代码对于许多 Gopher 来说，既是通往强大 C 生态的桥梁，也是通往“地狱”的入口。CGO 作为 Go 语言内建的 FFI 机制，其为人诟病的远不止是编译期的种种不便，更包含了昂贵的运行时开销和复杂的心智负担。 正是这...</description></item><item><title>Go 语言观察：登顶“最受期待”榜首，JetBrains 2025报告洞悉未来趋势</title><link>https://tonybai.com/2025/10/23/go-language-leads-jetbrains-trends/</link><pubDate>Thu, 23 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/23/go-language-leads-jetbrains-trends/</guid><description>本文永久链接 – https://tonybai.com/2025/10/23/go-language-leads-jetbrains-trends 大家好，我是Tony Bai。 近日，软件开发工具巨头 JetBrains 发布了其年2025度《开发者生态系统现状》报告，这份基于全球数万名开发者调研的数据报告，已成为洞察技术风向的关键参考之一。在今年的报告中，Go 语言的表现尤为亮眼，它不仅在“...</description></item><item><title>7 个常见的 Kubernetes 陷阱（以及我是如何学会避免它们的）</title><link>https://tonybai.com/2025/10/22/seven-kubernetes-pitfalls/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/22/seven-kubernetes-pitfalls/</guid><description>本文永久链接 – https://tonybai.com/2025/10/22/seven-kubernetes-pitfalls 大家好，我是Tony Bai。 本文翻译自Kubernetes官方博客《7 Common Kubernetes Pitfalls (and How I Learned to Avoid Them)》一文。 这篇文章的作者Abdelkoddous Lhajouji 以第...</description></item><item><title>从 Go “叛逃”到 Java，再回归：一位开发者关于“魔法”与“显式”的深度反思</title><link>https://tonybai.com/2025/10/22/back-to-go-after-defection-to-java/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/22/back-to-go-after-defection-to-java/</guid><description>本文永久链接 – https://tonybai.com/2025/10/22/back-to-go-after-defection-to-java 大家好，我是Tony Bai。 “我离开了 Go，因为我觉得它啰嗦又笨重。我以为编程本该是简单轻松的……但事实证明，河对岸的草不见得更绿。” 近日，在 r/golang 社区，一篇标题为《一篇完全没有建设性但又无比真实的，关于 Go 和 Java 的...</description></item><item><title>写出让同事赞不绝口的Go代码：Reddit工程师总结的10条地道Go编程法则</title><link>https://tonybai.com/2025/10/21/10-go-programming-rules-from-reddit/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/21/10-go-programming-rules-from-reddit/</guid><description>本文永久链接 – https://tonybai.com/2025/10/21/10-go-programming-rules-from-reddit 大家好，我是Tony Bai。 在团队协作中，Code Review是我们与同事交流最频繁的阵地。我们都渴望自己提交的代码能够清晰、健壮，赢得同事的“LGTM”（Looks Good To Me）。但有时，一些看似“吹毛求疵”的风格评论，如“改下变...</description></item><item><title>一个 Kubernetes 集群的“珠峰攀登”：从 10 万到 100 万节点的极限探索</title><link>https://tonybai.com/2025/10/20/k8s-1m-intro/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/20/k8s-1m-intro/</guid><description>本文永久链接 – https://tonybai.com/2025/10/20/k8s-1m-intro 大家好，我是Tony Bai。 在云原生的世界里，Kubernetes 集群的规模，如同一座待征服的高峰。业界巨头 AWS 已将旗帜插在了 **10 万**节点的高度，这曾被认为是云的“天际线”。然而，一位前OpenAI工程师(曾参与OpenAI 7.5k节点的Kubernetes集群的建设)...</description></item><item><title>为什么 Flask 的创造者选择 Go 作为他 AI 创业公司的核心语言？</title><link>https://tonybai.com/2025/10/19/flask-creator-choose-go/</link><pubDate>Sun, 19 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/19/flask-creator-choose-go/</guid><description>为什么 Flask 的创造者选择 Go 作为他 AI 创业公司的核心语言？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技...</description></item><item><title>AI 让代码产出速度提升 10 倍，为什么我们的软件交付成功率却停滞不前？</title><link>https://tonybai.com/2025/10/18/revisit-extreme-programming-in-the-age-of-ai/</link><pubDate>Sat, 18 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/18/revisit-extreme-programming-in-the-age-of-ai/</guid><description>AI 让代码产出速度提升 10 倍，为什么我们的软件交付成功率却停滞不前？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技...</description></item><item><title>Go 技术沉思录：Java 26 年演进史给我们带来的启示</title><link>https://tonybai.com/2025/10/18/lessons-from-java-26-years-evolution/</link><pubDate>Sat, 18 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/18/lessons-from-java-26-years-evolution/</guid><description>本文永久链接 – https://tonybai.com/2025/10/18/lessons-from-java-26-years-evolution 大家好，我是Tony Bai。 历史不会简单重复，但总是惊人地相似。编程语言的演化，如同一部波澜壮阔的史诗，充满了智慧的闪光、艰难的抉择与深刻的教训。 上月，资深工程师 Neil Madden 发表了一篇引人入胜的文章《点评 26 年的 Java...</description></item><item><title>收到非 UTF-8 文本怎么办？Go 字符集检测的探索与实践</title><link>https://tonybai.com/2025/10/17/detect-charset-in-go/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/17/detect-charset-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/10/17/detect-charset-in-go 大家好，我是Tony Bai。 在上一篇关于 Go 语言 string 与 rune 设计哲学的文章发布后，我收到了许多精彩的反馈。其中，一位读者提出了一个极具现实意义的后续问题：“既然 Go 的世界以 UTF-8 为中心，那么当我们从外部系统（如老旧的文件、非标准的 API）...</description></item><item><title>释放 Go 的极限潜能：CPU 缓存友好的数据结构设计指南</title><link>https://tonybai.com/2025/10/16/cpu-cache-friendly-in-go/</link><pubDate>Thu, 16 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/16/cpu-cache-friendly-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/10/16/cpu-cache-friendly-in-go 大家好，我是Tony Bai。 “现代 CPU 很快，而内存很慢。” 这句看似简单的陈词滥调，是理解现代高性能编程的唯一“真理”。我们常常致力于优化算法的时间复杂度，却忽略了一个更为根本的性能瓶颈：**数据在内存和 CPU 缓存之间的移动**。一次 L1 缓存的命中可能...</description></item><item><title>Go 考古：defer 的“救赎”——从性能“原罪”到零成本的“开放编码”</title><link>https://tonybai.com/2025/10/15/go-archaeology-defer/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/15/go-archaeology-defer/</guid><description>本文永久链接 – https://tonybai.com/2025/10/15/go-archaeology-defer 大家好，我是Tony Bai。 在 Go 语言的所有关键字中，defer 无疑是最具特色和争议的之一。它以一种近乎“魔法”的方式，保证了资源清理逻辑的执行，极大地提升了代码的可读性和健壮性。f, _ := os.Open(“…”); defer f.Close() 这一行代码，...</description></item><item><title>string 与 rune 的设计哲学：为什么Go 程序员很少为“乱码”烦恼？</title><link>https://tonybai.com/2025/10/13/string-and-rune-in-go/</link><pubDate>Mon, 13 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/13/string-and-rune-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/10/13/string-and-rune-in-go 大家好，我是Tony Bai。 &amp;gt; “为什么我的字符又乱码了？！” 这是一个在软件开发历史上，曾让无数程序员彻夜难眠的哀嚎。处理文本，是编程中最基础的任务之一，但其背后关于编码 (Encoding) 和字符集 (Character Set) 的水，远比看起来要深。正如 Joe...</description></item><item><title>从“键盘牛仔”到“规范工程师”，AI 浪潮下的程序员身份危机</title><link>https://tonybai.com/2025/10/12/the-programmer-identity-crisis/</link><pubDate>Sun, 12 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/12/the-programmer-identity-crisis/</guid><description>本文永久链接 – https://tonybai.com/2025/10/12/the-programmer-identity-crisis 大家好，我是Tony Bai。 “我是一个程序员。一个编码者。一个键盘牛仔……这是我的乐趣，也是我的身份认同。” 近日，一篇题为《程序员的身份危机》的博文在技术社区中引发了广泛的共鸣与讨论。作者Simon Højberg以一个“手艺人”的深情独白开篇，将我们...</description></item><item><title>Go 作为第一门编程语言：天才之选还是糟糕开端？</title><link>https://tonybai.com/2025/10/11/go-is-a-good-first-programming-language/</link><pubDate>Sat, 11 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/11/go-is-a-good-first-programming-language/</guid><description>Go 作为第一门编程语言：天才之选还是糟糕开端？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 Go...</description></item><item><title>Go 零拷贝“最后一公里”：Peek API背后的设计哲学与权衡</title><link>https://tonybai.com/2025/10/10/proposal-add-buffer-peek/</link><pubDate>Fri, 10 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/10/proposal-add-buffer-peek/</guid><description>本文永久链接 – https://tonybai.com/2025/10/10/proposal-add-buffer-peek 大家好，我是Tony Bai。 在 Go 的世界里，io.Reader 是一个神圣的接口。它如同一条设计精良、四通八达的高速公路，为数据流的传输提供了统一、优雅的抽象。然而，在这条高速公路的尽头，当数据流的目的地就在眼前——一块已然存在的内存（[]byte）时，我们却常...</description></item><item><title>Go开发者必读：JSON 的跨语言陷阱与 Go 防御指南</title><link>https://tonybai.com/2025/10/09/json-isnt-json/</link><pubDate>Thu, 09 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/09/json-isnt-json/</guid><description>本文永久链接 – https://tonybai.com/2025/10/09/json-isnt-json 大家好，我是Tony Bai。 JSON (JavaScript Object Notation)，以其简洁、轻量、人类可读的特性，早已成为 Web API 和系统集成的“通用语”。它的承诺是：“一次编写，随处解析”。然而，这份看似美好的承诺背后，隐藏着一个被许多开发者忽略的残酷现实：**...</description></item><item><title>只会 net/http 还不够，Go 网络编程的“深水区”你敢闯吗？</title><link>https://tonybai.com/2025/10/08/go-network-programming-complete-guide/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/08/go-network-programming-complete-guide/</guid><description>只会 net/http 还不够，Go 网络编程的“深水区”你敢闯吗？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏...</description></item><item><title>Go 标准库提供一个“Must” 函数？社区关于“断言式初始化”的思考</title><link>https://tonybai.com/2025/10/07/proposal-must-do/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/07/proposal-must-do/</guid><description>本文永久链接 – https://tonybai.com/2025/10/07/proposal-must-do 大家好，我是Tony Bai。 if err != nil 不仅是 Go 代码中最常见的片段，更是其错误处理哲学的基石。它强制开发者在每一个可能出错的地方，都必须直面失败的可能性。然而，当一个错误在理论上可能发生，但在实践中（尤其是在处理静态、已知的常量时）又“不可能”发生时，这种严谨...</description></item><item><title>超越时间的智慧：重读那些定义了现代软件开发的经典文章</title><link>https://tonybai.com/2025/10/04/the-software-essays-that-shaped-me/</link><pubDate>Sat, 04 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/04/the-software-essays-that-shaped-me/</guid><description>本文永久链接 – https://tonybai.com/2025/10/04/the-software-essays-that-shaped-me 大家好，我是Tony Bai。 二十年前，一位年轻的程序员在还未踏入职场时，便开始沉浸于软件开发的博客文章与深刻思考之中。二十年后，他已成为一名资深工程师，回首望去，成千上万的文字中，只有寥寥数篇真正沉淀下来，如基石般塑造了他的思维方式和职业生涯。 ...</description></item><item><title>Go 考古：Slice 的“隐秘角落”——只读切片与扩容策略的权衡</title><link>https://tonybai.com/2025/10/02/go-archaeology-slice/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/02/go-archaeology-slice/</guid><description>本文永久链接 – https://tonybai.com/2025/10/02/go-archaeology-slice 大家好，我是Tony Bai。 slice（切片），可以说是 Go 语言中最重要、也最常用的数据结构，没有之一。我们每天都在使用它，尤其是 append 函数，它就像一个魔术师，总能“恰到好处”地为我们管理好底层数组的容量，让我们几乎感受不到内存分配的烦恼。 但你是否想过，这份...</description></item><item><title>除了技术能力，什么决定了软件工程师的上限？答案是“品味”</title><link>https://tonybai.com/2025/09/30/good-taste-in-software-engineering/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/30/good-taste-in-software-engineering/</guid><description>本文永久链接 – https://tonybai.com/2025/09/30/good-taste-in-software-engineering 大家好，我是Tony Bai。 在软件工程领域，我们习惯于用“技术能力”（Technical Skill）来衡量一位工程师的优劣。他是否精通并发模型？能否写出高性能的代码？对底层原理的理解有多深？这些能力可以通过学习和重复练习来获得，是我们评价体系中...</description></item><item><title>并发测试神器 synctest的“成人礼”：从goroutine泄漏到微妙的竞态，Go团队如何修复三大“首日bug”？</title><link>https://tonybai.com/2025/09/29/synctest-bugs-in-go-1-25/</link><pubDate>Mon, 29 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/29/synctest-bugs-in-go-1-25/</guid><description>本文永久链接 – https://tonybai.com/2025/09/29/synctest-bugs-in-go-1-25 大家好，我是Tony Bai。 Go 1.25的发布，为我们带来了一个期待已久的“并发测试神器”—— testing/synctest。这个在Go 1.24中作为实验性功能首次亮相的包，承诺将我们从time.Sleep、channel和各种脆弱的同步技巧中解放出来，让我...</description></item><item><title>Dropbox最新研究解读：AI 正在拉平生产力差距，顶尖开发者如何脱颖而出？</title><link>https://tonybai.com/2025/09/28/how-top-performers-stand-out-in-the-age-of-ai/</link><pubDate>Sun, 28 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/28/how-top-performers-stand-out-in-the-age-of-ai/</guid><description>本文永久链接 – https://tonybai.com/2025/09/28/how-top-performers-stand-out-in-the-age-of-ai 大家好，我是Tony Bai。 AI 正在以前所未有的速度重塑软件开发领域。从代码生成到信息检索，AI 工具无疑极大地提升了工程师的生产力。一个普遍的假设是，谁能更好地利用 AI，谁就能成为新时代的顶尖人才。然而，Dropbox...</description></item><item><title>Go 结构体初始化的“反直觉”设计终于要改了？深入探讨嵌入字段直接初始化提案</title><link>https://tonybai.com/2025/09/27/direct-ref-to-embedded-fields-in-struct-literals/</link><pubDate>Sat, 27 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/27/direct-ref-to-embedded-fields-in-struct-literals/</guid><description>本文永久链接 – https://tonybai.com/2025/09/27/direct-ref-to-embedded-fields-in-struct-literals 大家好，我是Tony Bai。 在 Go 语言中，结构体嵌入 (Embedding) 是一个强大而独特的特性，它为我们提供了一种优雅的“垂直组合”方式。然而，多年来，它的使用体验中一直存在一个广为人知的“反直觉”之处，一个...</description></item><item><title>“自立程序员宣言”解读：这不就是我们一直在说的Go语言哲学吗？</title><link>https://tonybai.com/2025/09/26/self-reliant-programmer/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/26/self-reliant-programmer/</guid><description>“自立程序员宣言”解读：这不就是我们一直在说的Go语言哲学吗？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * ...</description></item><item><title>Go 安全的“隐形战争”：过去、现在与未来</title><link>https://tonybai.com/2025/09/25/go-security-past-present-and-future/</link><pubDate>Thu, 25 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/25/go-security-past-present-and-future/</guid><description>本文永久链接 – https://tonybai.com/2025/09/25/go-security-past-present-and-future 大家好，我是Tony Bai。 在软件安全领域，最成功的战役，往往是那些从未被公众所知的“隐形战争”。当一门编程语言的安全性被认为是理所当然时，这背后必然有一支团队在持续不断地进行着防御、修复与规划。对于 Go 语言而言，这支团队就是 Google...</description></item><item><title>Go团队成员的忠告：在你的API变得无法挽回之前，必须掌握的四条原则</title><link>https://tonybai.com/2025/09/24/evolving-your-go-api/</link><pubDate>Wed, 24 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/24/evolving-your-go-api/</guid><description>本文永久链接 – https://tonybai.com/2025/09/24/evolving-your-go-api 大家好，我是Tony Bai。 你在 package 中导出的每一个 func 和 type，都是一份对用户的**承诺**。然而，变化是软件开发中唯一不变的真理。当需求变更、bug 修复、甚至认知升级时，你将如何修改这份“承诺”，同时又最大限度地减少对你和你的用户造成的破坏？ ...</description></item><item><title>“可移植性”的隐藏成本：Go为何要重塑maphash并划定新的运行时边界？</title><link>https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries/</link><pubDate>Tue, 23 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries/</guid><description>本文永久链接 – https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries 大家好，我是Tony Bai。 对于大多数Go开发者来说，标准库似乎是一个浑然天成的整体。我们理所当然地使用着fmt、net/http和encoding/json，很少去思考它们内部的依赖关系和架构边界。然而，在标准...</description></item><item><title>“我们放弃了”——Go 团队坦诚布公，聊聊那些可能永远不会加入 Go 的功能</title><link>https://tonybai.com/2025/09/22/go-team-gave-up-on-features/</link><pubDate>Mon, 22 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/22/go-team-gave-up-on-features/</guid><description>本文永久链接 – https://tonybai.com/2025/09/22/go-team-gave-up-on-features 大家好，我是Tony Bai。 在 GopherCon Europe 2025 的 Go 团队座谈会上，Michael Stapelberg(负责go protobuf)、Damien Neil(负责Go安全相关)、Michael Pratt(负责Go运行时和Go...</description></item><item><title>面对“好主意”，为何开源项目的维护者必须学会说“不”？</title><link>https://tonybai.com/2025/09/21/why-maintainers-should-say-no-to-good-idea/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/21/why-maintainers-should-say-no-to-good-idea/</guid><description>面对“好主意”，为何开源项目的维护者必须学会说“不”？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表...</description></item><item><title>重构还是重写？GitHub工程师维护Go大项目的实践指南</title><link>https://tonybai.com/2025/09/20/refactoring-go-in-large-codebases/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/20/refactoring-go-in-large-codebases/</guid><description>本文永久链接 – https://tonybai.com/2025/09/20/refactoring-go-in-large-codebases 大家好，我是Tony Bai。 &amp;gt; “要不……我们重写吧？” 在任何一个发展到一定阶段的 Go 项目中，这句话都像一个幽灵，反复出现在技术讨论中。面对一个布满补丁、逻辑盘根错节、维护成本日益高昂的“大泥球” (Big Ball of Mud)，彻底推倒...</description></item><item><title>Go写业务是垃圾？Rust重写是坨屎？聊聊程序员评论区里的那股“煞气”</title><link>https://tonybai.com/2025/09/19/the-tension-in-programmer-comments/</link><pubDate>Fri, 19 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/19/the-tension-in-programmer-comments/</guid><description>本文永久链接 – https://tonybai.com/2025/09/19/the-tension-in-programmer-comments 大家好，我是Tony Bai。 做公众号/博客这些年，我收到了成千上万条来自程序员朋友的评论。绝大多数都充满了智慧、好奇和善意，正是这些交流，构成了我持续分享的最大动力。但与此同时，我也常常在评论区里，感受到一股强烈的、带有攻击性的无形之气。 比如，...</description></item><item><title>从arena、memory region到runtime.free：Go内存管理探索的务实转向</title><link>https://tonybai.com/2025/09/18/go-runtime-free-proposal/</link><pubDate>Thu, 18 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/18/go-runtime-free-proposal/</guid><description>本文永久链接 – https://tonybai.com/2025/09/18/go-runtime-free-proposal 大家好，我是Tony Bai。 Go 的垃圾收集器（GC）是其简单性和并发安全性的基石，但也一直是性能优化的焦点。近年来，Go 核心团队为了进一步降低 GC 开销，进行了一系列前沿探索：从备受争议的arena 实验，到更优雅但实现复杂的 memory regions构想...</description></item><item><title>Dave Cheney 复出首谈：那些我反复强调的Go编程模式</title><link>https://tonybai.com/2025/09/17/some-things-i-keep-repeating-about-go/</link><pubDate>Wed, 17 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/17/some-things-i-keep-repeating-about-go/</guid><description>本文永久链接 – https://tonybai.com/2025/09/17/some-things-i-keep-repeating-about-go 大家好，我是Tony Bai。 在阔别公众视野数年后，Go 社区的传奇人物 **Dave Cheney** 终于重返 GopherCon Europe 的舞台，发表了一场备受瞩目的**复出首谈**(注：我印象中的回归首谈^_^)。这场题为《那些...</description></item><item><title>Go 语言的灵魂之问：当“简单”变得“复杂”</title><link>https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex/</link><pubDate>Tue, 16 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/16/go-language-when-simple-becomes-complex/</guid><description>Go 语言的灵魂之问：当“简单”变得“复杂” - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 Go 语...</description></item><item><title>context：Go 语言的“天问”，你真的懂了吗？</title><link>https://tonybai.com/2025/09/15/go-context-column/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/15/go-context-column/</guid><description>context：Go 语言的“天问”，你真的懂了吗？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 ...</description></item><item><title>软件工程的永恒法则：《代码大全》作者访谈给我们的三大启示</title><link>https://tonybai.com/2025/09/14/code-complete-with-steve-mcconnell/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/14/code-complete-with-steve-mcconnell/</guid><description>软件工程的永恒法则：《代码大全》作者访谈给我们的三大启示 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列...</description></item><item><title>“包管理器是万恶之源”：一次来自Odin语言作者的灵魂拷问</title><link>https://tonybai.com/2025/09/13/package-managers-are-evil/</link><pubDate>Sat, 13 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/13/package-managers-are-evil/</guid><description>本文永久链接 – https://tonybai.com/2025/09/13/package-managers-are-evil 大家好，我是Tony Bai。 &amp;gt; “包管理器是万恶之源 (Package Managers are Evil)。” 这句石破天惊的论断，出自Odin语言的创造者Ginger Bill最近发表的一篇博文。在一个npm install、pip install、go ge...</description></item><item><title>超越零值：Go 语言“构造模式”深度指南</title><link>https://tonybai.com/2025/09/12/go-constructor-pattern-guide/</link><pubDate>Fri, 12 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/12/go-constructor-pattern-guide/</guid><description>本文永久链接 – https://tonybai.com/2025/09/12/go-constructor-pattern-guide 大家好，我是Tony Bai。 Go 语言的设计哲学崇尚简约与直白(straightforward)。其中，结构体字面量 (Struct Literal) 的存在，让我们可以用极其简单的方式创建数据结构。然而，在构建大型、复杂的系统时，这种简单性也可能成为一把双...</description></item><item><title>Azure CTO 深度解读：微软为何要用 Rust “替换” C/C++，又将如何用 AI 加速代码迁移？</title><link>https://tonybai.com/2025/09/11/microsoft-is-getting-rusty/</link><pubDate>Thu, 11 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/11/microsoft-is-getting-rusty/</guid><description>本文永久链接 – https://tonybai.com/2025/09/11/microsoft-is-getting-rusty 大家好，我是Tony Bai。 近日，微软 Azure CTO、技术巨擘 Mark Russinovich 在一场 Rust 技术会议上发表了闭幕演讲，以前所未有的坦诚和力度，揭示了微软内部正在进行的一场深刻的技术变革：全面拥抱 Rust，并战略性地替代 C/C++...</description></item><item><title>直面依赖之痛与TLS简化：GopherCon 2025贡献者峰会核心纪要深度解读</title><link>https://tonybai.com/2025/09/11/gophercon-2025-contributor-summit-notes/</link><pubDate>Thu, 11 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/11/gophercon-2025-contributor-summit-notes/</guid><description>本文永久链接 – https://tonybai.com/2025/09/11/gophercon-2025-contributor-summit-notes 大家好，我是Tony Bai。 GopherCon 2025 贡献者峰会刚刚落下帷幕。在这场Go核心团队与全球顶尖贡献者齐聚一堂的闭门会议中，Go语言的未来方向被激烈地讨论和塑造。这些讨论或许不像发布泛型那样惊天动地，但它们如同地壳深处的板...</description></item><item><title>MCP协议注册中心发布：Go在下一代AI基础设施中扮演关键角色</title><link>https://tonybai.com/2025/09/10/introducing-the-mcp-registry/</link><pubDate>Wed, 10 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/10/introducing-the-mcp-registry/</guid><description>本文永久链接 – https://tonybai.com/2025/09/10/introducing-the-mcp-registry 大家好，我是Tony Bai。 近日，模型上下文协议 (Model Context Protocol, MCP)官方发布了其生态系统的核心基础设施：MCP 注册中心 (MCP Registry)的预览版。这个开放的、分布式的目录服务不仅为 MCP 服务器的发现与...</description></item><item><title>最好的教师节礼物：来自2.5万名Gopher的认可</title><link>https://tonybai.com/2025/09/10/happy-teachers-day-2025/</link><pubDate>Wed, 10 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/10/happy-teachers-day-2025/</guid><description>最好的教师节礼物：来自2.5万名Gopher的认可 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 最...</description></item><item><title>NASA的十大编码“诫律”：Go视角的全新解读</title><link>https://tonybai.com/2025/09/09/the-power-of-ten-in-go/</link><pubDate>Tue, 09 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/09/the-power-of-ten-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/09/09/the-power-of-ten-in-go 大家好，我是Tony Bai。 在软件工程领域，有些智慧是永恒的。 2006 年，NASA/JPL（喷气推进实验室）的 Gerard J. Holzmann 公布了其团队用于开发**安全关键 (Safety-Critical)** 软件的十条黄金法则——“The Power...</description></item><item><title>从《凡人修仙传》看程序员境界：道友，你修炼到哪一层了？</title><link>https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels/</guid><description>本文永久链接 – https://tonybai.com/2025/09/08/fanren-xiuxian-programmer-levels 大家好，我是Tony Bai。 最近《凡人修仙传》的电视剧大火，想必各位道友都有耳闻。鄙人也没忍住，不仅刷完了杨洋主演的网剧，还趁着这股热乎劲儿，一口气在微信读书连读再听地补完了小说的人界篇。 当看到韩立资质平平，相貌普通，却凭着“小绿瓶”、远超常人的心...</description></item><item><title>为什么说“接口”，而非代码或硬件堆砌，决定了系统的性能上限？</title><link>https://tonybai.com/2025/09/07/the-power-of-an-interface-for-performance/</link><pubDate>Sun, 07 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/07/the-power-of-an-interface-for-performance/</guid><description>本文永久链接 – https://tonybai.com/2025/09/07/the-power-of-an-interface-for-performance &amp;gt; 我的《Go语言第一课》已上市，赠书活动正在进行中，欢迎点击此链接参与。 大家好，我是Tony Bai。 我们通常如何看待性能优化？答案往往是：更快的算法、更少的内存分配、更底层的并发原语、甚至用SIMD指令压榨CPU的每一个周期。我...</description></item><item><title>告别算法“天书”，Go程序员的学术伪代码“翻译”指南</title><link>https://tonybai.com/2025/09/06/gopher-pseudocode-translation-guide/</link><pubDate>Sat, 06 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/06/gopher-pseudocode-translation-guide/</guid><description>本文永久链接 – https://tonybai.com/2025/09/06/gopher-pseudocode-translation-guide 大家好，我是Tony Bai。 你是否曾在阅读顶会论文时，感觉其中的算法描述像一本晦涩难懂的**“天书”**？那些看不太懂的数学符号、奇特的箭头和看似代码又无法编译的语句(如下图)，是不是常常让你望而却步，感叹理论与实践之间隔着一道鸿沟？ 别担心，...</description></item><item><title>Go Proxy的“背景刷新”机制，是优化还是“DDoS”？一次社区事件引发的深度复盘</title><link>https://tonybai.com/2025/09/05/go-proxy-revise-background-refresh-pacing/</link><pubDate>Fri, 05 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/05/go-proxy-revise-background-refresh-pacing/</guid><description>本文永久链接 – https://tonybai.com/2025/09/05/go-proxy-revise-background-refresh-pacing 大家好，我是Tony Bai。 2025年8月14日，Go开发者Ted Unangst发表了一篇措辞犀利的博文——《What is the go proxy even doing?》。他用服务器日志作为证据，公开质疑Go官方模块代理（p...</description></item><item><title>“简单”不是“容易”：Go开发者应该懂的5个道理</title><link>https://tonybai.com/2025/09/04/simple-is-not-easy/</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/04/simple-is-not-easy/</guid><description>本文永久链接 – https://tonybai.com/2025/09/04/simple-is-not-easy 大家好，我是Tony Bai。 在软件工程领域，有些演讲如同灯塔，其光芒足以穿透时间的迷雾，持续为后来者指引方向。Clojure语言的创造者Rich Hickey在2011年的Strange Loop大会上发表的“Simple Made Easy”，正是这样一例。他以一种近乎哲学家...</description></item><item><title>Gopher直通大厂，就从这第一课开始！</title><link>https://tonybai.com/2025/09/03/gopher-first-lesson-to-big-factory/</link><pubDate>Wed, 03 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/03/gopher-first-lesson-to-big-factory/</guid><description>本文永久链接 – https://tonybai.com/2025/09/03/gopher-first-lesson-to-big-factory 大家好，我是Tony Bai。 很多计算机专业的同学们都在问：想进大厂，要先学好哪门编程语言？ 从应用广泛程度来说，学好Go语言肯定错不了！我们来看一下大厂们都用Go在做哪些开发： &amp;gt; 阿里用于基础服务、网关、容器、服务框架等开发。 &amp;gt; &amp;gt; &amp;gt; 字节...</description></item><item><title>亚马逊CTO Werner Vogels的9条军规</title><link>https://tonybai.com/2025/09/02/amazon-cto-werner-vogels-9-commandments/</link><pubDate>Tue, 02 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/02/amazon-cto-werner-vogels-9-commandments/</guid><description>亚马逊CTO Werner Vogels的9条军规 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 亚...</description></item><item><title>成为更完整的 Go 工程师，从补上这堂系统编程课开始</title><link>https://tonybai.com/2025/09/01/system-programming-in-go/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/01/system-programming-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/09/01/system-programming-in-go 大家好，我是Tony Bai。 作为一名 Go 工程师，我们无疑是幸运的。这门语言为我们提供了简洁的语法、强大的并发模型和一套设计精良的标准库。我们能以极高的效率，构建出高性能的 Web 服务、数据管道和云原生应用。 我们熟练地使用 http.ListenAndServ...</description></item><item><title>从 0 到 1.5 亿 QPS：Uber 核心存储架构的十年演进与缓存设计哲学</title><link>https://tonybai.com/2025/09/01/uber-150-million-reads/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/09/01/uber-150-million-reads/</guid><description>本文永久链接 – https://tonybai.com/2025/09/01/uber-150-million-reads 大家好，我是Tony Bai。 在 Uber 这样体量的公司，其核心在线存储系统不仅要处理 PB 级的海量数据，还要以毫秒级的延迟响应每秒上亿次的请求。这一切是如何实现的？本文将深度整合 Uber 工程团队这几年公开发布的三篇文章，和大家一起穿越其核心存储架构的十年演进史：...</description></item><item><title>“无聊”设计的终极奥义：为什么“做可能奏效的最简单的事”是最高法则？</title><link>https://tonybai.com/2025/08/31/the-simplest-thing-that-could-possibly-work/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/31/the-simplest-thing-that-could-possibly-work/</guid><description>本文永久链接 – https://tonybai.com/2025/08/31/the-simplest-thing-that-could-possibly-work 大家好，我是Tony Bai。 在我们解读了Github工程师Sean Goedecke关于“无聊即可靠”的系统设计和API设计理念之后，他再次带来了一篇精彩的的文章——《Do the simplest thing that cou...</description></item><item><title>Python简史：一个圣诞节的“私活”项目，如何改变了编程世界？</title><link>https://tonybai.com/2025/08/30/python-an-origin-story/</link><pubDate>Sat, 30 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/30/python-an-origin-story/</guid><description>本文永久链接 – https://tonybai.com/2025/08/30/python-an-origin-story 大家好，我是Tony Bai。 在编程语言的星空中，很少有哪颗星像Python一样，以如此温和而坚定的姿态，从一个不起眼的个人项目，成长为照亮地球未来的科技灯塔。如今，当我们谈论数据科学、人工智能时，Python几乎是绕不开的默认选项。但这一切的起点，竟源于一位程序员在阿姆...</description></item><item><title>无聊的API是最好的API：从系统设计到接口契约的九条法则</title><link>https://tonybai.com/2025/08/29/good-api-design/</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/29/good-api-design/</guid><description>本文永久链接 – https://tonybai.com/2025/08/29/good-api-design 大家好，我是Tony Bai。 在解读《Everything I know about good system design》一文时，我们曾提炼出一个核心观点：“无聊即可靠”。这个看似反直觉的法则，在追求创新与复杂的软件工程世界里，如同一股清流。现在，这个“无聊”哲学将从宏观的系统设计，...</description></item><item><title>我的 Gopher “长期主义”：从《Go语言第一课》新书说起</title><link>https://tonybai.com/2025/08/28/go-primer-published/</link><pubDate>Thu, 28 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/28/go-primer-published/</guid><description>本文永久链接 – https://tonybai.com/2025/08/28/go-primer-published 大家好，我是Tony Bai。 前不久，在知乎上看到一个关于 Go 社区的帖子，其中一条评论让我感慨良多： &amp;gt; **“GopherChina 都没了，国内还有几人坚持？Tony Bai好像还在更新”** 短短一句话，道尽了社区的变迁与坚持的不易。这句来自读者的回答，让我内心欣慰，...</description></item><item><title>Go语言的“灵魂拷问”：接口只关乎行为，还是也应拥抱数据？</title><link>https://tonybai.com/2025/08/27/go-interface-embrace-data/</link><pubDate>Wed, 27 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/27/go-interface-embrace-data/</guid><description>本文永久链接 – https://tonybai.com/2025/08/27/go-interface-embrace-data 大家好，我是Tony Bai。 在 Go 语言的世界里，接口（interface）一直被视为其设计哲学的基石之一——它只关心一个类型能**做什么**（行为），而不关心它**是什么**（结构）。这种基于方法集的鸭子类型，赋予了 Go 独一无二的灵活性和解耦能力。然而，随...</description></item><item><title>告别性能猜谜：一份Go并发操作的成本层级清单</title><link>https://tonybai.com/2025/08/26/go-concurrency-cost-hierarchy/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/26/go-concurrency-cost-hierarchy/</guid><description>本文永久链接 – https://tonybai.com/2025/08/26/go-concurrency-cost-hierarchy 大家好，我是Tony Bai。 Go语言的并发模型以其简洁直观著称，但这种简单性背后，隐藏着一个跨越五个数量级的巨大性能鸿沟。当你的高并发服务遭遇性能瓶颈时，你是否也曾陷入“性能猜谜”的困境：是sync.Mutex太慢？是atomic操作不够快？还是某个cha...</description></item><item><title>无聊即可靠：一位资深工程师的九条系统设计法则</title><link>https://tonybai.com/2025/08/26/good-system-design/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/26/good-system-design/</guid><description>本文永久链接 – https://tonybai.com/2025/08/26/good-system-design 大家好，我是Tony Bai。 在技术圈，我们常常被各种“炫技式”的系统设计建议所包围。从入门级的“你一定没听说过队列吧？”到专家级的“在数据库里存布尔值简直是灾难”，这些建议要么过于肤浅，要么过于精巧，往往脱离了大多数工程实践的真实上下文。就连《设计数据密集型应用》这样的经典之作...</description></item><item><title>Go的“七宗罪”：一篇“Go依然不够好”如何引爆社区激辩？</title><link>https://tonybai.com/2025/08/25/go-is-still-not-good/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/25/go-is-still-not-good/</guid><description>本文永久链接 – https://tonybai.com/2025/08/25/go-is-still-not-good 大家好，我是Tony Bai。 在技术圈，平静的湖面下往往暗流涌动。对于Go语言社区而言，这股潜藏已久的暗流，被近期的一篇名为《Go is still not good》的博文彻底引爆。作者Thomas Habets，一位自称拥有超过十年Go使用经验的资深开发者，在他的这篇文章...</description></item><item><title>掌握架构师的“编程语言”：将“想法”部署到“人”的艺术</title><link>https://tonybai.com/2025/08/25/documents-the-architects-programming-language/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/25/documents-the-architects-programming-language/</guid><description>本文永久链接 – https://tonybai.com/2025/08/25/documents-the-architects-programming-language 大家好，我是Tony Bai。 从初级到高级，开发者的职业路径通常是清晰的：写出更好的代码。但当站在高级工程师的十字路口，是转向管理还是深入技术成为架构师？许多人选择了后者，却发现这个角色的定义模糊不清。最近，stackover...</description></item><item><title>AI 时代的初级工程师生存指南：别让“万能”的AI工具，毁掉你最宝贵的成长期</title><link>https://tonybai.com/2025/08/24/junior-engineer-survival-guide-in-ai-age/</link><pubDate>Sun, 24 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/24/junior-engineer-survival-guide-in-ai-age/</guid><description>本文永久链接 – https://tonybai.com/2025/08/24/junior-engineer-survival-guide-in-ai-age 大家好，我是Tony Bai。 这是一个对初级工程师而言，最好也最坏的时代。 说它“最好”，是因为我们从未拥有过如此强大的工具。一名刚走出校门的毕业生，在入职的第一天，就能手握Claude Code、ChatGPT、Gemini Cli、...</description></item><item><title>泛型重塑 Go 错误检查：errors.As 的下一站 AsA？</title><link>https://tonybai.com/2025/08/23/proposal-errors-asa/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/23/proposal-errors-asa/</guid><description>本文永久链接 – https://tonybai.com/2025/08/23/proposal-errors-asa 大家好，我是Tony Bai。 自 Go 1.13 引入 errors.Is 和 errors.As 以来，Go 语言的错误处理进入了一个结构化、可追溯的新时代。然而，errors.As 的使用方式，对于追求代码简洁与优雅的 Gopher 而言，始终存在一丝“不和谐”：开发者必须...</description></item><item><title>解锁 CPU 终极性能：Go 原生 SIMD 包预览版初探</title><link>https://tonybai.com/2025/08/22/go-simd-package-preview/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/22/go-simd-package-preview/</guid><description>本文永久链接 – https://tonybai.com/2025/08/22/go-simd-package-preview 大家好，我是Tony Bai。 多年以来，对于追求极致性能的 Go 开发者而言，心中始终有一个“痛点”：当算法需要压榨 CPU 的最后一点性能时，唯一的选择便是“下降”到手写汇编，这让利用 SIMD (Single Instruction, Multiple Data) ...</description></item><item><title>哲学家与工程师：为何 Rust 和 Go 的“官方之声”如此不同？</title><link>https://tonybai.com/2025/08/21/go-rust-official-voices/</link><pubDate>Thu, 21 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/21/go-rust-official-voices/</guid><description>本文永久链接 – https://tonybai.com/2025/08/21/go-rust-official-voices 大家好，我是Tony Bai。 最近，在阅读 Rust 核心团队负责人 Niko Matsakis 庆祝十周年的系列博文时，我注意到了一个有趣的现象。我下意识地将他的文字，与我长期关注的 Go语言之父Rob Pike以及Go 团队前技术负责人 Russ Cox 的文章放在...</description></item><item><title>日志查询从 70 小时到 10 秒？VictoriaMetrics 联创揭示 PB 级日志处理性能奥秘</title><link>https://tonybai.com/2025/08/20/large-scale-logging-made-easy/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/20/large-scale-logging-made-easy/</guid><description>本文永久链接 – https://tonybai.com/2025/08/20/large-scale-logging-made-easy 当日志规模达到 PB 级别，传统的关系型数据库（如 PostgreSQL 或 MySQL）往往力不从心，不仅性能急剧下降，运维成本也变得难以承受。在 FrOSCon 2025 大会上，VictoriaMetrics 的联合创始人兼CTO、fasthttp作者、...</description></item><item><title>Rust 2025 深度解读：在十周年里程碑上，Niko Matsakis 如何擘画下一个时代的灵魂与蓝图？</title><link>https://tonybai.com/2025/08/19/rust-in-2025/</link><pubDate>Tue, 19 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/19/rust-in-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/08/18/rust-in-2025 大家好，我是Tony Bai。 2025 年 5 月 15 日，Rust 语言迎来了其 1.0 版本发布的十周年纪念日。这是一个充满里程碑意义的时刻，不仅是对Rust过去十年辉煌成就的回顾，更是展望未来的关键节点。值此之际，Rust 语言团队负责人、核心开发者 Niko Matsakis 发表...</description></item><item><title>收藏级指南：Gopher AI入局路线图</title><link>https://tonybai.com/2025/08/18/ai-app-dev-guide-for-gopher/</link><pubDate>Mon, 18 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/18/ai-app-dev-guide-for-gopher/</guid><description>本文永久链接 – https://tonybai.com/2025/08/18/ai-app-dev-guide-for-gopher 大家好，我是Tony Bai。 过去两年，人工智能（AI）以前所未有的姿态，从学术的象牙塔走入了软件工程的每一个角落。以大语言模型（LLM）为代表的生成式AI以及智能体AI，正在重塑我们开发、交付甚至构思软件的方式。 作为一个 Gopher，我们习惯于在云原生、微...</description></item><item><title>2025年最佳机器人Linux操作系统——顶级发行版与最新进展！</title><link>https://tonybai.com/2025/08/17/best-linux-os-for-robotics-in-2025/</link><pubDate>Sun, 17 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/17/best-linux-os-for-robotics-in-2025/</guid><description>本文永久链接 – https://tonybai.com/2025/08/17/best-linux-os-for-robotics-in-2025 大家好，我是Tony Bai。 如果你正投身于机器人技术领域，选择正确的操作系统至关重要。随着人工智能、自动化和机器学习的进步，机器人正变得前所未有的复杂。在为这些智能机器提供动力方面，Linux凭借其开源的灵活性、稳定性以及对机器人框架的广泛支持，...</description></item><item><title>从 Rob Pike 的提案到社区共识：Go 或将通过 new(v) 彻底解决指针初始化难题</title><link>https://tonybai.com/2025/08/17/create-pointer-to-simple-types/</link><pubDate>Sun, 17 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/17/create-pointer-to-simple-types/</guid><description>本文永久链接 – https://tonybai.com/2025/08/17/create-pointer-to-simple-types 大家好，我是Tony Bai。 在 Go 中创建一个指向基本类型（如 int 或 string）的指针，为何比创建一个指向结构体的指针更繁琐？这个长期存在的“人体工程学”问题，由 Go 语言的共同创造者之一 **Rob Pike** 在提案 #45624 中...</description></item><item><title>内核之外的冰山：为什么说从零写一个操作系统已几乎不可能？</title><link>https://tonybai.com/2025/08/16/brand-new-os-impossible/</link><pubDate>Sat, 16 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/16/brand-new-os-impossible/</guid><description>内核之外的冰山：为什么说从零写一个操作系统已几乎不可能？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列...</description></item><item><title>Go 1.25中值得关注的几个变化</title><link>https://tonybai.com/2025/08/15/some-changes-in-go-1-25/</link><pubDate>Fri, 15 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/15/some-changes-in-go-1-25/</guid><description>本文永久链接 – https://tonybai.com/2025/08/15/some-changes-in-go-1-25 大家好，我是Tony Bai。 北京时间2025年8月13日，Go 团队如期发布了 Go 语言的最新大版本——Go 1.25。按照惯例，每次 Go 大版本发布时，我都会撰写一篇“Go 1.x 中值得关注的几个变化”的文章。自 2014 年的 Go 1.4 版本起，这一系列...</description></item><item><title>AI正在重塑编程语言格局：Rust、Python 和 TypeScript 真是最终赢家吗？</title><link>https://tonybai.com/2025/08/14/rs-py-ts-trifecta/</link><pubDate>Thu, 14 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/14/rs-py-ts-trifecta/</guid><description>本文永久链接 – https://tonybai.com/2025/08/14/rs-py-ts-trifecta 大家好，我是Tony Bai。 在 AI 浪潮席卷而来的今天，一个深刻的问题正摆在所有开发者面前：我们手中的编程语言，将如何被这股力量重塑？我们未来的技能投资，应该押注在哪里？ 最近，Rust 核心团队的 Niko Matsakis，在他的一篇博文中给出了一个大胆的预测：**Rust...</description></item><item><title>二进制的“魔术”：每个 Go 程序员都应掌握的位操作艺术</title><link>https://tonybai.com/2025/08/13/bit-manipulation-in-go/</link><pubDate>Wed, 13 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/13/bit-manipulation-in-go/</guid><description>二进制的“魔术”：每个 Go 程序员都应掌握的位操作艺术 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列...</description></item><item><title>Go 的“身份危机”：当新 Gopher 试图将它变成他们最爱的语言</title><link>https://tonybai.com/2025/08/12/go-identity-crisis/</link><pubDate>Tue, 12 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/12/go-identity-crisis/</guid><description>本文永久链接 – https://tonybai.com/2025/08/12/go-identity-crisis 大家好，我是Tony Bai。 最近，在国外的 Go 社区（Reddit r/golang）上，一个帖子引发了我的深思。发帖者是一位资深的 Gopher，他用一种略带困惑的语气写道： &amp;gt; “我感受到来自新 Go 开发者的巨大压力，他们想把 Go 变成他们最喜欢的语言。” 他列出了一...</description></item><item><title>为何Go语言迟迟未能拥抱 io_uring？揭秘集成的三大核心困境</title><link>https://tonybai.com/2025/08/11/why-go-not-embrace-iouring/</link><pubDate>Mon, 11 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/11/why-go-not-embrace-iouring/</guid><description>本文永久链接 – https://tonybai.com/2025/08/11/why-go-not-embrace-iouring 大家好，我是Tony Bai。 在 Linux I/O 的世界里，io_uring 如同划破夜空的流星，被誉为“终极接口”。它承诺以无与伦比的效率，为数据密集型应用带来革命性的性能提升。正如高性能数据库 ScyllaDB 在其官方博文中所展示的，io_uring 能...</description></item><item><title>Google 揭秘生产环境调试心法：SRE 与 SWE 的四大思维差异与实战路径</title><link>https://tonybai.com/2025/08/10/debugging-incidents-in-google/</link><pubDate>Sun, 10 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/10/debugging-incidents-in-google/</guid><description>本文永久链接 – https://tonybai.com/2025/mm/dd/debugging-Incidents-in-google 大家好，我是Tony Bai。 尽管 Google 的 SRE 手册为我们描绘了理想的运维蓝图，但在“炮火连天”的生产事故现场，工程师的真实反应往往是另一番景象。 最近，一篇发表于 ACM Queue 的研究深入剖析了 Google 工程师（包括 SRE 和 ...</description></item><item><title>Go json/v2实战：告别内存爆炸，掌握真流式Marshal和Unmarshal</title><link>https://tonybai.com/2025/08/09/true-streaming-support-in-jsonv2/</link><pubDate>Sat, 09 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/09/true-streaming-support-in-jsonv2/</guid><description>本文永久链接 – https://tonybai.com/2025/08/09/true-streaming-support-in-jsonv2 大家好，我是Tony Bai。 Go 开发者长期以来面临一个痛点：标准库 encoding/json 在处理大型 JSON 数据时，即使使用 Encoder/Decoder，也因其内部的全量缓冲机制而导致巨大的内存开销。备受期待的 encoding/js...</description></item><item><title>想用Go复刻“Claude Code”？那你得先补上TUI这一课</title><link>https://tonybai.com/2025/08/08/go-tui-primer/</link><pubDate>Fri, 08 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/08/go-tui-primer/</guid><description>想用Go复刻“Claude Code”？那你得先补上TUI这一课 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 *...</description></item><item><title>Go 模块的“分叉之痛”：一个提案能否终结“全局替换”的噩梦？</title><link>https://tonybai.com/2025/08/07/fork-go-module/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/07/fork-go-module/</guid><description>本文永久链接 – https://tonybai.com/2025/08/07/fork-go-module 大家好，我是Tony Bai。 今天，我想和你聊一个几乎每个 Go 开发者都经历过的场景，一种我们圈内人“只可意会，不可言传”的痛苦。我称之为 Go 模块的**“分叉之痛” (The Forking Pain)**。 故事通常是这样开始的：你在一个项目中，依赖了一个第三方库。某天，你发现这...</description></item><item><title>Go语言正在成为“老旧”生态的“新引擎”？从 FrankenPHP 和新版 TypeScript 编译器谈起</title><link>https://tonybai.com/2025/08/06/go-new-engine-of-old-languages/</link><pubDate>Wed, 06 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/06/go-new-engine-of-old-languages/</guid><description>Go语言正在成为“老旧”生态的“新引擎”？从 FrankenPHP 和新版 TypeScript 编译器谈起 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进...</description></item><item><title>警惕 AI 效率神话：你是“闪电战”的独立开发者，还是“持久战”的工程师？</title><link>https://tonybai.com/2025/08/06/blitzkrieg-vs-attrition-in-ai-age/</link><pubDate>Wed, 06 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/06/blitzkrieg-vs-attrition-in-ai-age/</guid><description>警惕 AI 效率神话：你是“闪电战”的独立开发者，还是“持久战”的工程师？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技...</description></item><item><title>从“锁”到“channel”：开启你的Go并发心智模型转变之旅</title><link>https://tonybai.com/2025/08/05/go-concurrency-mental-model/</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/05/go-concurrency-mental-model/</guid><description>从“锁”到“channel”：开启你的Go并发心智模型转变之旅 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * ...</description></item><item><title>后VMware时代：为什么Kubernetes正在成为VM的新家？</title><link>https://tonybai.com/2025/08/05/the-voice-of-k8s-experts-report-2025/</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/05/the-voice-of-k8s-experts-report-2025/</guid><description>后VMware时代：为什么Kubernetes正在成为VM的新家？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 ...</description></item><item><title>持续性能分析正在成为继Metrics、Logs 和 Traces之后，可观测性的“第四大支柱”</title><link>https://tonybai.com/2025/08/04/continuous-profiling-fourth-pillar/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/04/continuous-profiling-fourth-pillar/</guid><description>本文永久链接 – https://tonybai.com/2025/08/04/continuous-profiling-fourth-pillar 大家好，我是Tony Bai。 凌晨两点，运维平台的警报刺破了宁静。P99 延迟飙升，用户服务几近瘫痪。作为 Go 工程师，你的脑海中闪过无数可能：是数据库慢了？是下游服务超时？还是某个新上线的 goroutine 泄露了？你急忙打开监控面板，**M...</description></item><item><title>AI 正在放大技术选型的风险：为什么我们更应该“选择无聊的技术”</title><link>https://tonybai.com/2025/08/03/choose-boring-technology/</link><pubDate>Sun, 03 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/03/choose-boring-technology/</guid><description>AI 正在放大技术选型的风险：为什么我们更应该“选择无聊的技术” - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 *...</description></item><item><title>Go官方 HTTP/3 实现终迎曙光：x/net/http3 提案启动，QUIC 基础已就位</title><link>https://tonybai.com/2025/08/02/proposal-http3/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/02/proposal-http3/</guid><description>本文永久链接 – https://tonybai.com/2025/08/02/proposal-http3 大家好，我是Tony Bai。 在社区长达数年的热切期盼之后，Go 官方终于迈出了支持 HTTP/3 的关键一步。一项编号为#70914的新提案，正式建议在 x/net/http3 中添加一个实验性的 HTTP/3 实现。这一进展建立在另一项更基础的提案 #58547(x/net/quic...</description></item><item><title>purego 标签到底是什么意思？一场长达六年的社区辩论终于有了定论</title><link>https://tonybai.com/2025/08/01/proposal-purego/</link><pubDate>Fri, 01 Aug 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/08/01/proposal-purego/</guid><description>purego 标签到底是什么意思？一场长达六年的社区辩论终于有了定论 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏...</description></item><item><title>系统设计的“元素周期表”：40个横跨所有领域的通用设计原则</title><link>https://tonybai.com/2025/07/31/periodic-table-of-system-design/</link><pubDate>Thu, 31 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/31/periodic-table-of-system-design/</guid><description>本文永久链接 – https://tonybai.com/2025/07/31/periodic-table-of-system-design 大家好，我是Tony Bai。 近日，一篇名为《系统设计的元素》（Elements of System Design）的论文引发社区热议。它的目标宏大且吸睛：通过梳理上百篇横跨操作系统、数据库、分布式系统等领域的经典论文，提炼出一套通用的**系统设计原则“...</description></item><item><title>你的 AI Agent 为何总“犯傻”？构建生产级 Agent 所需的6大工程原则</title><link>https://tonybai.com/2025/07/30/six-principles-production-ai-agents/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/30/six-principles-production-ai-agents/</guid><description>本文永久链接 – https://tonybai.com/2025/07/30/six-principles-production-ai-agents 大家好，我是Tony Bai。 随着 AI Agent 技术的兴起，许多开发者都投入到构建智能体的浪潮中，但很快就会发现，让 Agent 稳定、可靠地工作远非想象中容易。它们时而产生幻觉，时而偏离轨道，时而做出一些令人费解的“愚蠢”行为。最近，来自...</description></item><item><title>slog 如何同时输出到控制台和文件？MultiHandler 提案或将终结重复造轮子</title><link>https://tonybai.com/2025/07/29/slog-multihandler/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/29/slog-multihandler/</guid><description>本文永久链接 – https://tonybai.com/2025/07/29/slog-multihandler 大家好，我是Tony Bai。 自 log/slog 在 Go 1.21 中引入以来，一个常见的需求始终困扰着开发者：如何将日志同时发送到多个目的地，并为每个目的地设置不同的日志级别？尽管社区已涌现出 samber/slog-multi 等优秀的三方库，但关于“标准库是否应原生支持”...</description></item><item><title>Go fix 命令将迎“重生”：移除过时功能，为集成现代化代码分析器铺平道路</title><link>https://tonybai.com/2025/07/28/go-fix-reborn/</link><pubDate>Mon, 28 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/28/go-fix-reborn/</guid><description>本文永久链接 – https://tonybai.com/2025/07/28/go-fix-reborn 大家好，我是Tony Bai。 Go 语言工具链中的元老级命令 go fix 即将迎来其生命周期中最重要的转折点。一项编号为 **#73605** 的新提案建议移除 go fix 当前的全部功能，使其暂时成为一个空命令。这一看似“激进”的举动，实则是为一个更宏大的目标铺路：将 go fix ...</description></item><item><title>Prometheus 联合创始人的警告：在使用 OpenTelemetry 生成 Metrics 前请三思！</title><link>https://tonybai.com/2025/07/27/native-prometheus-instrumentation-over-opentelemetry/</link><pubDate>Sun, 27 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/27/native-prometheus-instrumentation-over-opentelemetry/</guid><description>本文永久链接 – https://tonybai.com/2025/07/27/native-prometheus-instrumentation-over-opentelemetry 大家好，我是Tony Bai。 在云原生可观测性的世界里，OpenTelemetry (OTel) 正如日中天。它被誉为“可观测性的未来”，承诺用一个统一的标准，终结 Metrics、Traces、Logs 各自为...</description></item><item><title>为什么 VictoriaMetrics 正在替换 Prometheus？一次大规模可观测性迁移实录</title><link>https://tonybai.com/2025/07/26/migrate-from-prometheus-to-victoriametrics/</link><pubDate>Sat, 26 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/26/migrate-from-prometheus-to-victoriametrics/</guid><description>本文永久链接 – https://tonybai.com/2025/07/26/migrate-from-prometheus-to-victoriametrics 大家好，我是Tony Bai。 在云原生可观测性的领域，Prometheus 无疑是王者。凭借其简洁的模型、强大的 PromQL 和活跃的社区，Prometheus 几乎定义了现代监控的行业标准。许多顶尖技术公司，包括 PingCAP...</description></item><item><title>Anthropic内部实践首次公开：揭秘Claude Code如何引爆全员生产力</title><link>https://tonybai.com/2025/07/25/how-anthropic-teams-use-claude-code/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/25/how-anthropic-teams-use-claude-code/</guid><description>本文永久链接 – https://tonybai.com/2025/07/25/how-anthropic-teams-use-claude-code 当 AI 编程助手从简单的代码补全工具，演变为深度集成于开发者工作流核心的“终端原生 AI”（Terminal-native AI）时，一个根本性的问题浮现出来：**顶尖团队究竟是如何在日常工作中驾驭这股新力量的？** 理论和演示层出不穷，但真实、...</description></item><item><title>Go vs. Rust vs. C++：从语言规范长度看三种不同的“复杂性”</title><link>https://tonybai.com/2025/07/25/go-vs-rust-vs-cpp-in-complexity/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/25/go-vs-rust-vs-cpp-in-complexity/</guid><description>Go vs. Rust vs. C++：从语言规范长度看三种不同的“复杂性” - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的...</description></item><item><title>写作即思考：AI 时代，开发者为什么要警惕“思考外包”？</title><link>https://tonybai.com/2025/07/25/writing-is-thinking/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/25/writing-is-thinking/</guid><description>写作即思考：AI 时代，开发者为什么要警惕“思考外包”？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列...</description></item><item><title>Goroutine泄漏防不胜防？Go GC或将可以检测“部分死锁”，已在Uber生产环境验证</title><link>https://tonybai.com/2025/07/24/deadlock-detection-by-gc/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/24/deadlock-detection-by-gc/</guid><description>本文永久链接 – https://tonybai.com/2025/07/24/deadlock-detection-by-gc 大家好，我是Tony Bai。 Go 语言的 go 关键字让并发编程变得前所未有的简单，但也带来了新的挑战。当所有 goroutine 都陷入阻塞时，Go runtime 会报告一个“全局死锁”并终止程序。然而，更常见也更隐蔽的是**部分死锁**：一部分 gorouti...</description></item><item><title>美国运通复盘 Go 语言实践：从依赖管理到并发模型，七大经验教训全解析</title><link>https://tonybai.com/2025/07/24/go-at-american-express-today/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/24/go-at-american-express-today/</guid><description>美国运通复盘 Go 语言实践：从依赖管理到并发模型，七大经验教训全解析 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专...</description></item><item><title>Uber性能优化实践：如何用 GenAI 将 Go 代码调优从数周缩短至数小时？</title><link>https://tonybai.com/2025/07/23/uber-perfinsights/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/23/uber-perfinsights/</guid><description>本文永久链接 – https://tonybai.com/2025/07/23/uber-perfinsights 大家好，我是Tony Bai。 对于大多数团队而言，Go 服务的性能优化是一项昂贵且充满挑战的任务。它通常需要资深的工程师花费数天甚至数周的时间进行 profiling、基准测试和代码分析，这在快节奏的开发周期中往往难以持续。Uber 面临着同样的问题，其 Top 10 的 Go 服...</description></item><item><title>不止是云原生：为什么 Go 的热度在持续上升？来自社区的真实声音</title><link>https://tonybai.com/2025/07/23/go-surge-in-popularity/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/23/go-surge-in-popularity/</guid><description>不止是云原生：为什么 Go 的热度在持续上升？来自社区的真实声音 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 *...</description></item><item><title>Go 1.24用户报告：Datadog如何借助 Swiss Tables版map节省数百 GB 内存？</title><link>https://tonybai.com/2025/07/22/go-swiss-table-map-user-report/</link><pubDate>Tue, 22 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/22/go-swiss-table-map-user-report/</guid><description>本文永久链接 – https://tonybai.com/2025/07/22/go-swiss-table-map-user-report 大家好，我是Tony Bai。 Datadog 的故事始于一次对Go 1.24内存回归问题的追踪。在与 Go 社区协作修复了该问题后，他们在部署修复版本的过程中，观察到了一个意料之外的现象：在高流量环境中，内存使用不仅恢复了正常，甚至**大幅下降**。一个名...</description></item><item><title>Rust 的安全神话？数据库 CEO 为何在关键系统中仍选 C++</title><link>https://tonybai.com/2025/07/22/cedardb-choose-cpp-rather-than-rust/</link><pubDate>Tue, 22 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/22/cedardb-choose-cpp-rather-than-rust/</guid><description>Rust 的安全神话？数据库 CEO 为何在关键系统中仍选 C++ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 ...</description></item><item><title>解密 Go 安全核心：7 步掌握现代密码学工程</title><link>https://tonybai.com/2025/07/21/go-crypto-101/</link><pubDate>Mon, 21 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/21/go-crypto-101/</guid><description>解密 Go 安全核心：7 步掌握现代密码学工程 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 解密 ...</description></item><item><title>HashiCorp创始人Mitchell Hashimoto 的 Agentic Engineering 实战心法</title><link>https://tonybai.com/2025/07/20/mitchell-hashimoto-agentic-engineering/</link><pubDate>Sun, 20 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/20/mitchell-hashimoto-agentic-engineering/</guid><description>本文永久链接 – https://tonybai.com/2025/07/20/mitchell-hashimoto-agentic-engineering 大家好，我是Tony Bai。 在云计算Infra和云原生工程领域，Mitchell Hashimoto 是一个如雷贯耳的名字。作为 HashiCorp 的创始人，他一手打造了 Terraform、Vagrant、Consul 等一系列定义了...</description></item><item><title>Go 比 Python 更懂“Python 之禅”？</title><link>https://tonybai.com/2025/07/19/go-understand-the-zen-of-python-better-than-python/</link><pubDate>Sat, 19 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/19/go-understand-the-zen-of-python-better-than-python/</guid><description>本文永久链接 – https://tonybai.com/2025/07/19/go-understand-the-zen-of-python-better-than-python 大家好，我是Tony Bai。 最近，在国外的 Go 语言社区（Reddit r/golang）上，一个帖子引发了热烈的讨论。标题颇具“引战”意味：“Go似乎比Python更好地实现了Python之禅”。 这听起来像个...</description></item><item><title>一张图读懂Go的生存之道：当“面条代码”来敲门</title><link>https://tonybai.com/2025/07/16/when-spaghetti-code-knocks/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/16/when-spaghetti-code-knocks/</guid><description>本文永久链接 – https://tonybai.com/2025/07/16/when-spaghetti-code-knocks 大家好，我是Tony Bai。 最近，在网上看到一张关于编程语言的 Meme 图，它以一种黑色幽默的方式，精准地描绘了我们软件开发中一个永恒的敌人，以及 Go 语言那与众不同的应对之道。 在这张图中，一个名为“面条代码 (Spaghetti Code)”的恐怖死神，...</description></item><item><title>AI 正在重写“软件工程师”的岗位描述：未来你需要这 6 项核心技能</title><link>https://tonybai.com/2025/07/15/the-agentic-software-engineer/</link><pubDate>Tue, 15 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/15/the-agentic-software-engineer/</guid><description>AI 正在重写“软件工程师”的岗位描述：未来你需要这 6 项核心技能 - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏...</description></item><item><title>代码之外的必修课：顶级技术文档风格指南如何提升你的工程效率</title><link>https://tonybai.com/2025/07/14/writing-style-guide/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/14/writing-style-guide/</guid><description>本文永久链接 – https://tonybai.com/2025/07/14/writing-style-guide 大家好，我是Tony Bai。 作为一名开发者、架构师或运维专家，我们大部分时间都在与代码、系统和架构打交道。然而，我们同样在持续不断地进行另一种形式的“编码”——**沟通编码**。无论是撰写一个清晰的 README.md，提交一份详尽的 Pull Request 描述，编写项目...</description></item><item><title>Go 的“无聊”超能力：为什么“选项更少”反而让你更快？</title><link>https://tonybai.com/2025/07/12/insanely-productive-in-go/</link><pubDate>Sat, 12 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/12/insanely-productive-in-go/</guid><description>Go 的“无聊”超能力：为什么“选项更少”反而让你更快？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列...</description></item><item><title>Go pprof 迎来重大革新：v2 提案详解，告别默认注册，拥抱飞行记录器</title><link>https://tonybai.com/2025/07/11/net-http-pprof-v2/</link><pubDate>Fri, 11 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/11/net-http-pprof-v2/</guid><description>本文永久链接 – https://tonybai.com/2025/07/11/net-http-pprof-v2 大家好，我是Tony Bai。 Go 语言的性能诊断利器 net/http/pprof 即将迎来一次意义深远的变革。一项编号为 **#74544** 的新提案建议引入一个全新的 net/http/pprof/v2 包，旨在从根本上解决当前版本因“默认注册”行为带来的安全隐患。该提案不...</description></item><item><title>上手MCP官方Go SDK：一份面向实战的入门指南</title><link>https://tonybai.com/2025/07/10/mcp-official-go-sdk/</link><pubDate>Thu, 10 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/10/mcp-official-go-sdk/</guid><description>本文永久链接 – https://tonybai.com/2025/07/10/mcp-official-go-sdk 大家好，我是Tony Bai。 随着大型语言模型（LLM）的能力边界不断扩展，“function calling”或“tool use”已成为释放其潜力的关键。MCP（Model Context Protocol）正是为此而生，它定义了一套标准的、与模型无关的通信规范，使得任何应...</description></item><item><title>停止构建AI Agent！这里有5个更简单的LLM工作流模式，能解决90%的问题</title><link>https://tonybai.com/2025/07/10/stop-building-ai-agents/</link><pubDate>Thu, 10 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/10/stop-building-ai-agents/</guid><description>本文永久链接 – https://tonybai.com/2025/07/10/stop-building-ai-agents 大家好，我是Tony Bai。 如果你正在开发 AI 应用，你很可能听说过、尝试过，甚至正在挣扎于构建一个“AI Agent”。 我们都看过那些令人心潮澎湃的 Demo：一个 AI Agent 被赋予一个目标，然后它就能自主地规划、调用工具、浏览网页、编写代码，最终完成任...</description></item><item><title>你的命令行，即将迎来一场“AI 革命”</title><link>https://tonybai.com/2025/07/09/gemini-cli-starting-guide/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/09/gemini-cli-starting-guide/</guid><description>你的命令行，即将迎来一场“AI 革命” - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * 文章列表 你的命令行，即...</description></item><item><title>告别字符串魔法：Go 迎来类型化 Struct Tag 提案，编译期安全触手可及？</title><link>https://tonybai.com/2025/07/08/typed-struct-tags/</link><pubDate>Tue, 08 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/08/typed-struct-tags/</guid><description>本文永久链接 – https://tonybai.com/2025/07/08/typed-struct-tags 大家好，我是Tony Bai。 Go 语言的结构体标签（Struct Tag）自诞生以来，一直是其强大反射能力的重要组成部分，广泛应用于 encoding/json、ORM、配置管理等领域。然而，它也一直是一个“美丽的缺憾”：这些标签本质上是无类型的字符串，依赖于各种“微语言”和“纳...</description></item><item><title>“先发布，后审核”：Go模块生态的阿喀琉斯之踵？</title><link>https://tonybai.com/2025/07/07/go-module-supply-chain-attack-case/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/07/go-module-supply-chain-attack-case/</guid><description>本文永久链接 – https://tonybai.com/2025/07/07/go-module-supply-chain-attack-case 大家好，我是Tony Bai。 最近，GitLab的安全研究团队披露了一起极其巧妙的供应链攻击，目标直指 Go 社区中一个流行的 MongoDB 模块。这个案例本身已经足够令人警醒，但如果我们拨开攻击手法的层层迷雾，会发现其背后暴露出的，可能是整个开...</description></item><item><title>读懂Go的设计哲学：为什么说它是“恰到好处”的80/20语言？</title><link>https://tonybai.com/2025/07/05/go-is-8020-language/</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/05/go-is-8020-language/</guid><description>读懂Go的设计哲学：为什么说它是“恰到好处”的80/20语言？ - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的技术专栏 * ...</description></item><item><title>拥抱Agentic Coding：软件开发的未来</title><link>https://tonybai.com/2025/07/05/agentic-coding-is-the-future/</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/05/agentic-coding-is-the-future/</guid><description>本文永久链接 – https://tonybai.com/2025/07/05/agentic-coding-is-the-future 大家好，我是Tony Bai。 软件开发的范式正在经历一场深刻的变革。从 GitHub Copilot 的惊艳亮相，到各种IDE中集成的代码生成功能，我们已经习惯了 AI 在编码过程中的“自动补全”。但这仅仅是序幕。如今，一种更强大、更具颠覆性的模式正在兴起，它...</description></item><item><title>NVIDIA 的颠覆性观点：AI Agent 的未来，属于小模型 (SLM)</title><link>https://tonybai.com/2025/07/04/slm-is-the-future-of-agentic-ai/</link><pubDate>Fri, 04 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/04/slm-is-the-future-of-agentic-ai/</guid><description>NVIDIA 的颠覆性观点：AI Agent 的未来，属于小模型 (SLM) - Tony Bai Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 我的...</description></item><item><title>Twitch工程师的Go进阶之路：为何你写的Go代码，总感觉“不对劲”？</title><link>https://tonybai.com/2025/07/04/everything-i-did-to-become-an-expert-in-golang/</link><pubDate>Fri, 04 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/04/everything-i-did-to-become-an-expert-in-golang/</guid><description>本文永久链接 – https://tonybai.com/2025/07/04/everything-i-did-to-become-an-expert-in-golang 大家好，我是Tony Bai。 你是否也有过这样的时刻？ 你已经用 Go 写了不少代码，项目也能跑起来，但内心深处总有一种挥之不去的“别扭感”。你写的 Go 代码，看起来更像是“带有 Go 语法的 Java/Python”，充...</description></item><item><title>Go考古：创始人亲述Go语言的“创世纪”</title><link>https://tonybai.com/2025/07/03/meet-the-go-team-2012/</link><pubDate>Thu, 03 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/03/meet-the-go-team-2012/</guid><description>本文永久链接 – https://tonybai.com/2025/07/03/meet-the-go-team-2012 大家好，我是Tony Bai。 2012 年，Google I/O 大会的舞台上，一个刚刚发布 1.0 版本的编程语言团队，正襟危坐。他们面对着全球开发者的审视和提问，这其中，就有三位图灵奖得主级别的传奇人物：Ken Thompson、Rob Pike 和 Robert Gr...</description></item><item><title>别再直接让 AI 写代码了！试试这个“Vibe Specs”模式，效率提升60%</title><link>https://tonybai.com/2025/07/02/vibe-specs/</link><pubDate>Wed, 02 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/02/vibe-specs/</guid><description>本文永久链接 – https://tonybai.com/2025/07/02/vibe-specs 大家好，我是Tony Bai。 你是否也曾掉入 AI 编程的“氛围陷阱”？ 你坐在 IDE 前，脑海中有一个自以为清晰的任务。你信心满满地打开 AI 助手，给出一个模糊的指令，也就是所谓的“氛围”编程 (Vibe Coding)。结果，AI 像一个过度热情的实习生，还给你一堆看似合理但完全无用的“...</description></item><item><title>特斯拉首席工程师的忠告：用“单向门 vs 双向门”决策，看清分布式系统的未来</title><link>https://tonybai.com/2025/07/01/predicting-the-future-of-distributed-systems/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/01/predicting-the-future-of-distributed-systems/</guid><description>特斯拉首席工程师的忠告：用“单向门 vs 双向门”决策，看清分布式系统的未来 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进...</description></item><item><title>Go并行编程的“第一性原理”：Guy Steele 教你如何“不去想”并行</title><link>https://tonybai.com/2025/06/29/thinking-parallel-programming/</link><pubDate>Sun, 29 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/29/thinking-parallel-programming/</guid><description>Go并行编程的“第一性原理”：Guy Steele 教你如何“不去想”并行 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶...</description></item><item><title>Gopher视角：Java 开发者转向 Go 时，最需要“掰过来”的几个习惯</title><link>https://tonybai.com/2025/06/27/from-java-to-go/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/27/from-java-to-go/</guid><description>Gopher视角：Java 开发者转向 Go 时，最需要“掰过来”的几个习惯 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进...</description></item><item><title>Martin Fowler最新洞察：LLM 不止是“更高”的抽象，它正在改变编程的“本质”！</title><link>https://tonybai.com/2025/06/26/non-deterministic-abstraction/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/26/non-deterministic-abstraction/</guid><description>Martin Fowler最新洞察：LLM 不止是“更高”的抽象，它正在改变编程的“本质”！ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ...</description></item><item><title>Go vs. Rust再掀波澜：Grab真实案例复盘，Gopher如何看待这场“效率与代价”之争？</title><link>https://tonybai.com/2025/06/24/grab-rewrote-go-service-in-rust/</link><pubDate>Tue, 24 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/24/grab-rewrote-go-service-in-rust/</guid><description>Go vs. Rust再掀波澜：Grab真实案例复盘，Gopher如何看待这场“效率与代价”之争？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课...</description></item><item><title>Go 解析器的“隐秘角落”：encoding/json 的安全陷阱与 JSONv2 的救赎</title><link>https://tonybai.com/2025/06/22/unexpected-security-footguns-in-go-parsers/</link><pubDate>Sun, 22 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/22/unexpected-security-footguns-in-go-parsers/</guid><description>本文永久链接 – https://tonybai.com/2025/06/22/unexpected-security-footguns-in-go-parsers 大家好，我是Tony Bai。 在 Go 语言中，标准库的 encoding/json 包无疑是我们日常打交道最多的伙伴之一。它简洁易用，性能尚可，支撑了无数 Go 应用的数据交换需求。然而，正如俗话所说，“最熟悉的地方可能藏着最深的...</description></item><item><title>Kubernetes 2.0 畅想：告别 YAML、etcd 束缚与 Helm 之痛，K8s 的下一站是什么？</title><link>https://tonybai.com/2025/06/21/kubernetes-2-0/</link><pubDate>Sat, 21 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/21/kubernetes-2-0/</guid><description>Kubernetes 2.0 畅想：告别 YAML、etcd 束缚与 Helm 之痛，K8s 的下一站是什么？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * G...</description></item><item><title>Go errors.Join：是“天赐之物”还是“潘多拉魔盒”？——深入错误聚合的适用场景与最佳实践</title><link>https://tonybai.com/2025/06/20/about-errors-join/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/20/about-errors-join/</guid><description>本文永久链接 – https://tonybai.com/2025/06/20/about-errors-join 大家好，我是Tony Bai。 错误处理，无疑是软件开发中永恒的核心议题之一。Go 语言以其独特的、显式的错误处理机制（即 error 作为普通值返回）而著称，这种设计强调了对错误的关注和及时处理。自 Go 1.13 引入错误包装 (wrapping) 机制以来，Go 的错误处理能力...</description></item><item><title>RedMonk最新排行出炉：Go语言稳居Top 12，AI 冲击下 Stack Overflow 权重生变？</title><link>https://tonybai.com/2025/06/20/redmonk-index-2025-jan/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/20/redmonk-index-2025-jan/</guid><description>RedMonk最新排行出炉：Go语言稳居Top 12，AI 冲击下 Stack Overflow 权重生变？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go...</description></item><item><title>当一切皆可用Python：Go这样的通用语言与DSL的未来价值何在？</title><link>https://tonybai.com/2025/06/19/language-design-in-the-era-of-llm/</link><pubDate>Thu, 19 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/19/language-design-in-the-era-of-llm/</guid><description>当一切皆可用Python：Go这样的通用语言与DSL的未来价值何在？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FA...</description></item><item><title>解构Go并发之核，与Dmitry Vyukov共探Go调度艺术</title><link>https://tonybai.com/2025/06/18/inside-goroutine-scheduler-column/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/18/inside-goroutine-scheduler-column/</guid><description>解构Go并发之核，与Dmitry Vyukov共探Go调度艺术 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>“骑手与大象”架构：超越微服务与单体之争的务实之道？</title><link>https://tonybai.com/2025/06/17/rider-elephant-arch/</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/17/rider-elephant-arch/</guid><description>“骑手与大象”架构：超越微服务与单体之争的务实之道？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 ...</description></item><item><title>GCP大面积故障，Go语言是“元凶”还是“背锅侠”？</title><link>https://tonybai.com/2025/06/16/go-avoid-critical-incident/</link><pubDate>Mon, 16 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/16/go-avoid-critical-incident/</guid><description>GCP大面积故障，Go语言是“元凶”还是“背锅侠”？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 ...</description></item><item><title>Go还是Rust？2025年技术选型之辩</title><link>https://tonybai.com/2025/06/15/rust-vs-go-2025/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/15/rust-vs-go-2025/</guid><description>Go还是Rust？2025年技术选型之辩 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 文章列表...</description></item><item><title>Go 1.25新特性前瞻：GC提速，容器更“懂”Go，json有v2了！</title><link>https://tonybai.com/2025/06/14/go-1-25-foresight/</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/14/go-1-25-foresight/</guid><description>Go 1.25新特性前瞻：GC提速，容器更“懂”Go，json有v2了！ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课...</description></item><item><title>爽就完了！Go语言的“简单之美”为何让开发者直呼过瘾？</title><link>https://tonybai.com/2025/06/12/grog-brain-heaven/</link><pubDate>Thu, 12 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/12/grog-brain-heaven/</guid><description>爽就完了！Go语言的“简单之美”为何让开发者直呼过瘾？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我...</description></item><item><title>Sam Altman的“温和奇点”已至：我们真的越过了AI的“事件视界”吗？</title><link>https://tonybai.com/2025/06/11/the-gentle-singularity/</link><pubDate>Wed, 11 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/11/the-gentle-singularity/</guid><description>Sam Altman的“温和奇点”已至：我们真的越过了AI的“事件视界”吗？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进...</description></item><item><title>告别手写汇编：Go官方提出原生SIMD支持，高性能计算将迎来巨变</title><link>https://tonybai.com/2025/06/09/go-simd-intrinsics/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/09/go-simd-intrinsics/</guid><description>告别手写汇编：Go官方提出原生SIMD支持，高性能计算将迎来巨变 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ ...</description></item><item><title>“Rustacean”胚胎 vs “Gopher”胚胎：假如用技术栈测“人格”，你会是哪一款？</title><link>https://tonybai.com/2025/06/07/nucleus-embryo/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/07/nucleus-embryo/</guid><description>“Rustacean”胚胎 vs “Gopher”胚胎：假如用技术栈测“人格”，你会是哪一款？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FA...</description></item><item><title>千呼万唤始出来？Go 1.25解决Git仓库子目录作为模块根路径难题</title><link>https://tonybai.com/2025/06/07/allow-serving-module-under-subdir/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/07/allow-serving-module-under-subdir/</guid><description>千呼万唤始出来？Go 1.25解决Git仓库子目录作为模块根路径难题 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FA...</description></item><item><title>Go项目该拥抱Monorepo吗？Google经验、etcd模式及白盒交付场景下的深度剖析</title><link>https://tonybai.com/2025/06/06/go-monorepo/</link><pubDate>Fri, 06 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/06/go-monorepo/</guid><description>Go项目该拥抱Monorepo吗？Google经验、etcd模式及白盒交付场景下的深度剖析 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ ...</description></item><item><title>Go 错误处理语法之争尘埃落定？Go 团队为何十五年探索后仍选择“不”</title><link>https://tonybai.com/2025/06/04/error-syntax/</link><pubDate>Wed, 04 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/04/error-syntax/</guid><description>Go 错误处理语法之争尘埃落定？Go 团队为何十五年探索后仍选择“不” - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课F...</description></item><item><title>AI 编码工具“真香”还是“智商税”？一位资深码农的“挑衅”与Go开发者的反思</title><link>https://tonybai.com/2025/06/03/provocation-about-ai-assisted-programming/</link><pubDate>Tue, 03 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/03/provocation-about-ai-assisted-programming/</guid><description>AI 编码工具“真香”还是“智商税”？一位资深码农的“挑衅”与Go开发者的反思 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言...</description></item><item><title>Go的简洁性之辩：轻量级匿名函数提案为何七年悬而未决？</title><link>https://tonybai.com/2025/06/03/lightweight-anonymous-func-syntax/</link><pubDate>Tue, 03 Jun 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/06/03/lightweight-anonymous-func-syntax/</guid><description>Go的简洁性之辩：轻量级匿名函数提案为何七年悬而未决？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我...</description></item><item><title>“这代码迟早出事！”——复盘线上问题：六个让你头痛的Go编码坏味道</title><link>https://tonybai.com/2025/05/31/six-smells-in-go/</link><pubDate>Sat, 31 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/31/six-smells-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/05/31/six-smells-in-go 大家好，我是Tony Bai。 在日常的代码审查 (Code Review) 和线上问题复盘中，我经常会遇到一些看似不起眼，却可能埋下巨大隐患的 Go 代码问题。这些“编码坏味道”轻则导致逻辑混乱、性能下降，重则引发数据不一致、系统崩溃，甚至让团队成员在深夜被告警声惊醒，苦不堪言。 今...</description></item><item><title>当Gopher拥有了“Go语言女友”：一张图带你读懂Go的那些“可爱”特性</title><link>https://tonybai.com/2025/05/30/gopher-girlfriend/</link><pubDate>Fri, 30 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/30/gopher-girlfriend/</guid><description>当Gopher拥有了“Go语言女友”：一张图带你读懂Go的那些“可爱”特性 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶...</description></item><item><title>Go x/exp/xiter提案搁浅背后：社区的选择与深度思考</title><link>https://tonybai.com/2025/05/29/xiter-declined/</link><pubDate>Thu, 29 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/29/xiter-declined/</guid><description>Go x/exp/xiter提案搁浅背后：社区的选择与深度思考 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>云原生时代，如何用RED三板斧搞定服务监控？</title><link>https://tonybai.com/2025/05/26/monitor-design-with-red/</link><pubDate>Mon, 26 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/26/monitor-design-with-red/</guid><description>云原生时代，如何用RED三板斧搞定服务监控？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 文章...</description></item><item><title>Google I/O 2025 Go 语言进展：生产力、生产就绪与 AI 赋能</title><link>https://tonybai.com/2025/05/25/go-at-googleio-2025/</link><pubDate>Sun, 25 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/25/go-at-googleio-2025/</guid><description>Google I/O 2025 Go 语言进展：生产力、生产就绪与 AI 赋能 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言...</description></item><item><title>API设计的“Go境界”：Go团队设计MCP SDK过程中的取舍与思考</title><link>https://tonybai.com/2025/05/23/go-api-design-mcp-sdk/</link><pubDate>Fri, 23 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/23/go-api-design-mcp-sdk/</guid><description>本文永久链接 – https://tonybai.com/2025/05/23/go-api-design-mcp-sdk 大家好，我是 Tony Bai。 作为开发者，我们每天都在与 API 打交道——调用它们，设计它们，有时也会为糟糕的 API 设计而头痛不已。一个优秀的 API，如同一位技艺精湛的向导，能清晰、高效地引领我们通往复杂功能的彼岸；而一个蹩脚的 API，则可能像一座布满陷阱的迷宫...</description></item><item><title>Go工具链进化：go.mod新增ignore指令，破解混合项目构建难题</title><link>https://tonybai.com/2025/05/22/go-mod-ignore-directive/</link><pubDate>Thu, 22 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/22/go-mod-ignore-directive/</guid><description>Go工具链进化：go.mod新增ignore指令，破解混合项目构建难题 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课F...</description></item><item><title>透视软件供应链安全：SBOM标准解读与Go项目生成指南</title><link>https://tonybai.com/2025/05/22/go-sbom-practice/</link><pubDate>Thu, 22 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/22/go-sbom-practice/</guid><description>本文永久链接 – https://tonybai.com/2025/05/22/go-sbom-practice 大家好，我是Tony Bai。 近年来，软件供应链安全事件频发，从 SolarWinds 到 Log4Shell，每一次都给业界敲响了警钟。在这样的背景下，软件物料清单 (SBOM, Software Bill of Materials) 的重要性日益凸显。无论是甲方爸爸的硬性要求（尤...</description></item><item><title>权威认证：Go核心密码学库通过独立安全审计</title><link>https://tonybai.com/2025/05/21/go-crypto-audit/</link><pubDate>Wed, 21 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/21/go-crypto-audit/</guid><description>权威认证：Go核心密码学库通过独立安全审计 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 文章列...</description></item><item><title>未雨绸缪：Go开发者需要了解的后量子密码学与实现现状</title><link>https://tonybai.com/2025/05/20/post-quantum-cryptography-in-go/</link><pubDate>Tue, 20 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/20/post-quantum-cryptography-in-go/</guid><description>本文永久链接 – https://tonybai.com/2025/05/20/post-quantum-cryptography-in-go 大家好，我是 Tony Bai。 在我们享受数字时代便利的同时，信息安全始终是悬在我们头顶的达摩克利斯之剑。而这把剑，正面临着来自未来的一个巨大挑战——**量子计算机**。一旦实用化的大规模量子计算机问世，我们当前广泛依赖的许多经典密码体系（如 RSA、椭...</description></item><item><title>原子操作的瓶颈与Go的多核扩展性之痛：深入剖析sync.ShardedValue及per-CPU提案</title><link>https://tonybai.com/2025/05/19/shardedvalue-per-cpu-proposal/</link><pubDate>Mon, 19 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/19/shardedvalue-per-cpu-proposal/</guid><description>原子操作的瓶颈与Go的多核扩展性之痛：深入剖析sync.ShardedValue及per-CPU提案 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一...</description></item><item><title>Java屹立30年，Go的“少年壮志”如何续写辉煌？——来自Java之父的“长寿秘诀”</title><link>https://tonybai.com/2025/05/17/java-at-30/</link><pubDate>Sat, 17 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/17/java-at-30/</guid><description>Java屹立30年，Go的“少年壮志”如何续写辉煌？——来自Java之父的“长寿秘诀” - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * ...</description></item><item><title>揭秘Go语言中的rune：一段跨越30年的Plan 9往事与UTF-8的诞生传奇</title><link>https://tonybai.com/2025/05/16/how-rune-came/</link><pubDate>Fri, 16 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/16/how-rune-came/</guid><description>揭秘Go语言中的rune：一段跨越30年的Plan 9往事与UTF-8的诞生传奇 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语...</description></item><item><title>思想实验：如果全球网站一夜之间弃用HTTPS，能为地球节省多少电？</title><link>https://tonybai.com/2025/05/16/energy-savings-if-abandon-https/</link><pubDate>Fri, 16 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/16/energy-savings-if-abandon-https/</guid><description>思想实验：如果全球网站一夜之间弃用HTTPS，能为地球节省多少电？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ...</description></item><item><title>手把手带你玩转GOEXPERIMENT=jsonv2：Go下一代JSON库初探</title><link>https://tonybai.com/2025/05/15/go-json-v2/</link><pubDate>Thu, 15 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/15/go-json-v2/</guid><description>本文永久链接 – https://tonybai.com/2025/05/15/go-json-v2 大家好，我是Tony Bai。 Go 语言标准库中的 encoding/json 包，无疑是我们日常开发中使用频率最高的包之一。它为 Go 社区服务了十多年，几乎无处不在。但与此同时，它也因一些历史遗留的 API 缺陷、行为不一致以及在某些场景下的性能瓶颈而受到过不少讨论和批评。社区中甚至涌现出像...</description></item><item><title>从Go路由选择看“标准库优先”：何时坚守？何时拓展？</title><link>https://tonybai.com/2025/05/14/which-go-router-should-i-use/</link><pubDate>Wed, 14 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/14/which-go-router-should-i-use/</guid><description>从Go路由选择看“标准库优先”：何时坚守？何时拓展？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 ...</description></item><item><title>Go社区的“轻框架”理念：自由的馈赠还是无形的枷锁？</title><link>https://tonybai.com/2025/05/13/go-prefer-less-framework/</link><pubDate>Tue, 13 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/13/go-prefer-less-framework/</guid><description>Go社区的“轻框架”理念：自由的馈赠还是无形的枷锁？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 ...</description></item><item><title>Go运行时底层接口标准化？“GOOS=none”欲为Go铺设通往裸金属、固件和微控制器的桥梁</title><link>https://tonybai.com/2025/05/13/goos-none-proposal/</link><pubDate>Tue, 13 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/13/goos-none-proposal/</guid><description>Go运行时底层接口标准化？“GOOS=none”欲为Go铺设通往裸金属、固件和微控制器的桥梁 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ...</description></item><item><title>从线下到线上，我的“Go语言进阶课”终于在极客时间与大家见面了！</title><link>https://tonybai.com/2025/05/12/go-advanced-course/</link><pubDate>Mon, 12 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/12/go-advanced-course/</guid><description>从线下到线上，我的“Go语言进阶课”终于在极客时间与大家见面了！ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ ...</description></item><item><title>Go包维护者必读：如何让你的Go包更易被发现、文档更专业？</title><link>https://tonybai.com/2025/05/11/deep-into-pkg-go-dev/</link><pubDate>Sun, 11 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/11/deep-into-pkg-go-dev/</guid><description>Go包维护者必读：如何让你的Go包更易被发现、文档更专业？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关...</description></item><item><title>Go语言进入“后元老时代”？Ian Lance Taylor离职引发的思考：传承、创新与社区</title><link>https://tonybai.com/2025/05/11/ian-lance-taylor-leave-go/</link><pubDate>Sun, 11 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/11/ian-lance-taylor-leave-go/</guid><description>Go语言进入“后元老时代”？Ian Lance Taylor离职引发的思考：传承、创新与社区 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ...</description></item><item><title>百万行依赖的“恐惧”：一位Rust开发者的深度反思与Go的启示</title><link>https://tonybai.com/2025/05/10/rust-dependencies-scare-me/</link><pubDate>Sat, 10 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/10/rust-dependencies-scare-me/</guid><description>百万行依赖的“恐惧”：一位Rust开发者的深度反思与Go的启示 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>GitHub英语沟通太难？别让语言成为你参与顶级Go项目的拦路虎！</title><link>https://tonybai.com/2025/05/09/github-english-communication-patterns-and-practice/</link><pubDate>Fri, 09 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/09/github-english-communication-patterns-and-practice/</guid><description>本文永久链接 – https://tonybai.com/2025/05/09/github-english-communication-patterns-and-practice 大家好，我是 Tony Bai。 身处全球化的软件开发浪潮中，GitHub早已成为我们协作、学习、贡献的“宇宙中心”。但对于我们许多非英语母语的开发者来说，它既是机遇之地，有时也是“望而却步”的挑战场。 你是否也曾有过...</description></item><item><title>Go 1.25链接器提速、执行文件瘦身：DWARF 5调试信息格式升级终落地</title><link>https://tonybai.com/2025/05/08/go-dwarf5/</link><pubDate>Thu, 08 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/08/go-dwarf5/</guid><description>Go 1.25链接器提速、执行文件瘦身：DWARF 5调试信息格式升级终落地 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进...</description></item><item><title>代码覆盖率新玩法：Russ Cox教你用差异化分析加速Go调试</title><link>https://tonybai.com/2025/05/07/debug-with-diff-cover/</link><pubDate>Wed, 07 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/07/debug-with-diff-cover/</guid><description>代码覆盖率新玩法：Russ Cox教你用差异化分析加速Go调试 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>解读“Cheating the Reaper”：在Go中与GC共舞的Arena黑科技</title><link>https://tonybai.com/2025/05/06/cheating-the-reaper-in-go/</link><pubDate>Tue, 06 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/06/cheating-the-reaper-in-go/</guid><description>解读“Cheating the Reaper”：在Go中与GC共舞的Arena黑科技 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * G...</description></item><item><title>Go新垃圾回收器登场：Green Tea GC如何通过内存感知显著降低CPU开销？</title><link>https://tonybai.com/2025/05/03/go-green-tea-garbage-collector/</link><pubDate>Sat, 03 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/03/go-green-tea-garbage-collector/</guid><description>Go新垃圾回收器登场：Green Tea GC如何通过内存感知显著降低CPU开销？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go...</description></item><item><title>“错误即值”，不同实现：Go与Zig错误处理哲学对比</title><link>https://tonybai.com/2025/04/30/go-vs-zig-in-error-handling/</link><pubDate>Wed, 30 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/30/go-vs-zig-in-error-handling/</guid><description>本文永久链接 – https://tonybai.com/2025/04/30/go-vs-zig-in-error-handling 大家好，我是Tony Bai。 使用Go语言有些年头的开发者，大多对其错误处理机制有着复杂的情感。一方面，我们认同 Rob Pike 所倡导的“错误即值 (Errors are values)”的核心哲学——错误不是需要特殊通道（如异常）处理的“二等公民”，它们是...</description></item><item><title>Go的简洁神话？转Go前你需要知道的5个“真相”</title><link>https://tonybai.com/2025/04/29/hard-truths-before-switching-to-go/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/29/hard-truths-before-switching-to-go/</guid><description>Go的简洁神话？转Go前你需要知道的5个“真相” - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * ...</description></item><item><title>go-yaml归档背后：Go开源生态的“脆弱”与“韧性”，我们该如何看待？</title><link>https://tonybai.com/2025/04/28/go-ecosystem/</link><pubDate>Mon, 28 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/28/go-ecosystem/</guid><description>go-yaml归档背后：Go开源生态的“脆弱”与“韧性”，我们该如何看待？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶...</description></item><item><title>Go开发者必知：五大缓存策略详解与选型指南</title><link>https://tonybai.com/2025/04/28/five-cache-strategies/</link><pubDate>Mon, 28 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/28/five-cache-strategies/</guid><description>本文永久链接 – https://tonybai.com/2025/04/28/five-cache-strategies 大家好，我是Tony Bai。 在构建高性能、高可用的后端服务时，缓存几乎是绕不开的话题。无论是为了加速数据访问，还是为了减轻数据库等主数据源的压力，缓存都扮演着至关重要的角色。对于我们 Go 开发者来说，选择并正确地实施缓存策略，是提升应用性能的关键技能之一。 目前业界主流...</description></item><item><title>Rob Pike的“抱怨”与Go的“解药”：直面软件膨胀的四大根源</title><link>https://tonybai.com/2025/04/27/rob-pike-on-bloat/</link><pubDate>Sun, 27 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/27/rob-pike-on-bloat/</guid><description>Rob Pike的“抱怨”与Go的“解药”：直面软件膨胀的四大根源 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ...</description></item><item><title>【规律之手】资深码农都懂？软件工程中的13条“潜规则”定律</title><link>https://tonybai.com/2025/04/26/13-laws-of-software-engineering/</link><pubDate>Sat, 26 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/26/13-laws-of-software-engineering/</guid><description>【规律之手】资深码农都懂？软件工程中的13条“潜规则”定律 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关...</description></item><item><title>一个字符引发的30%性能下降：Go值接收者的隐藏成本与优化</title><link>https://tonybai.com/2025/04/25/hidden-costs-of-go-value-receiver/</link><pubDate>Fri, 25 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/25/hidden-costs-of-go-value-receiver/</guid><description>一个字符引发的30%性能下降：Go值接收者的隐藏成本与优化 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关...</description></item><item><title>Go应用的K8s“最佳拍档”：何时以及如何用好多容器Pod模式</title><link>https://tonybai.com/2025/04/24/multiple-containers-pod-pattern/</link><pubDate>Thu, 24 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/24/multiple-containers-pod-pattern/</guid><description>Go应用的K8s“最佳拍档”：何时以及如何用好多容器Pod模式 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>拯救你的Commit Log：Conventional Commits实践指南</title><link>https://tonybai.com/2025/04/24/conventional-commits-guide/</link><pubDate>Thu, 24 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/24/conventional-commits-guide/</guid><description>拯救你的Commit Log：Conventional Commits实践指南 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言...</description></item><item><title>世界读书日：如何高效阅读“砖头”技术书？我的心法分享（文末赠书）</title><link>https://tonybai.com/2025/04/23/tips-for-reading-technical-books/</link><pubDate>Wed, 23 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/23/tips-for-reading-technical-books/</guid><description>世界读书日：如何高效阅读“砖头”技术书？我的心法分享（文末赠书） - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ ...</description></item><item><title>不止Go，更是Go+AI：我的知识星球「Go &amp; AI 精进营」全新启航！</title><link>https://tonybai.com/2025/04/22/go-ai-knowledge-community-launch/</link><pubDate>Tue, 22 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/22/go-ai-knowledge-community-launch/</guid><description>不止Go，更是Go+AI：我的知识星球「Go &amp;amp; AI 精进营」全新启航！ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶...</description></item><item><title>Go项目设计的“七宗罪”？警惕那些流行的“反模式”</title><link>https://tonybai.com/2025/04/21/go-project-design-antipatterns/</link><pubDate>Mon, 21 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/21/go-project-design-antipatterns/</guid><description>Go项目设计的“七宗罪”？警惕那些流行的“反模式” - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 *...</description></item><item><title>AI会写Go代码了，初学者还需要系统学习吗？</title><link>https://tonybai.com/2025/04/19/learn-go-in-ai-era/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/19/learn-go-in-ai-era/</guid><description>AI会写Go代码了，初学者还需要系统学习吗？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 文章...</description></item><item><title>代码Agent没有护城河？我用Go标准库和DeepSeek证明给你看！</title><link>https://tonybai.com/2025/04/18/reproduce-thorsten-balls-code-agent/</link><pubDate>Fri, 18 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/18/reproduce-thorsten-balls-code-agent/</guid><description>本文永久链接 – https://tonybai.com/2025/04/18/reproduce-thorsten-balls-code-agent 大家好，我是Tony Bai。 人工智能Agent风头正劲，但构建它们真的那么难吗？本文深入解读Thorsten Ball 的“皇帝新衣”论，并通过一个 Go 标准库 + OpenAI Compatible API + DeepSeek的实战复现，...</description></item><item><title>“Go is badly designed”？它像极了我们当年恨过的物理老师！</title><link>https://tonybai.com/2025/04/17/go-is-badly-designed/</link><pubDate>Thu, 17 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/17/go-is-badly-designed/</guid><description>“Go is badly designed”？它像极了我们当年恨过的物理老师！ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言...</description></item><item><title>自定义Hash终迎标准化？Go提案maphash.Hasher接口设计解读</title><link>https://tonybai.com/2025/04/17/standardize-the-hash-function/</link><pubDate>Thu, 17 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/17/standardize-the-hash-function/</guid><description>自定义Hash终迎标准化？Go提案maphash.Hasher接口设计解读 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶...</description></item><item><title>RPC 2.0</title><link>https://tonybai.com/2025/04/16/ai-protocol-prefer-jsonrpc/</link><pubDate>Wed, 16 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/16/ai-protocol-prefer-jsonrpc/</guid><description>AI新宠？解读MCP、A2A为何偏爱JSON-RPC 2.0 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * ...</description></item><item><title>11个现代Go特性：用gopls/modernize让你的代码焕然一新</title><link>https://tonybai.com/2025/04/15/embrace-modern-go-style-with-gopls-modernize/</link><pubDate>Tue, 15 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/15/embrace-modern-go-style-with-gopls-modernize/</guid><description>本文永久链接 – https://tonybai.com/2025/04/15/embrace-modern-go-style-with-gopls-modernize 大家好，我是Tony Bai。 最近在思考Go语言的发展时，不禁让我想起了当年学习C++的经历。Bjarne Stroustrup在《C++程序设计语言（特别版）》中就专门强调了“现代 C++”（Modern C++）的编程风格，...</description></item><item><title>告别智能体孤岛：谷歌A2A协议能否成为企业AI协作的通用语？</title><link>https://tonybai.com/2025/04/14/what-is-a2a-protocol/</link><pubDate>Mon, 14 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/14/what-is-a2a-protocol/</guid><description>本文永久链接 – https://tonybai.com/2025/04/14/what-is-a2a-protocol 随着人工智能（AI）的飞速发展，AI 智能体（Agent）正成为企业自动化、提升生产力的关键力量。从处理日常重复任务到辅助复杂决策，智能体的应用场景日益广泛。然而，一个严峻的挑战随之而来：**不同框架、不同厂商构建的智能体往往如同信息孤岛，难以有效协作**，这极大地限制了它们在...</description></item><item><title>揭秘顶尖技术专家的15个关键方法与心态，不只靠代码</title><link>https://tonybai.com/2025/04/13/top-programmers-methods-mindset/</link><pubDate>Sun, 13 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/13/top-programmers-methods-mindset/</guid><description>揭秘顶尖技术专家的15个关键方法与心态，不只靠代码 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 *...</description></item><item><title>Go开发者必看！Uber如何利用PGO将Go服务性能优化推向新高度？</title><link>https://tonybai.com/2025/04/11/uber-go-pgo-optimization/</link><pubDate>Fri, 11 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/11/uber-go-pgo-optimization/</guid><description>Go开发者必看！Uber如何利用PGO将Go服务性能优化推向新高度？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FA...</description></item><item><title>Go开发者必看！JetBrains 2024报告深度解读：Go语言现状、趋势与未来机遇</title><link>https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis/</link><pubDate>Thu, 10 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/10/jetbrains-2024-go-report-analysis/</guid><description>Go开发者必看！JetBrains 2024报告深度解读：Go语言现状、趋势与未来机遇 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * ...</description></item><item><title>Go 1.25新提案：GOMAXPROCS默认值将迎Cgroup感知能力，终结容器性能噩梦？</title><link>https://tonybai.com/2025/04/09/gomaxprocs-defaults-add-cgroup-aware/</link><pubDate>Wed, 09 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/09/gomaxprocs-defaults-add-cgroup-aware/</guid><description>Go 1.25新提案：GOMAXPROCS默认值将迎Cgroup感知能力，终结容器性能噩梦？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ...</description></item><item><title>Go testing包将迎来新增强：标准化属性与持久化构件API即将落地</title><link>https://tonybai.com/2025/04/07/go-testing-add-attr-and-artifactdir/</link><pubDate>Mon, 07 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/07/go-testing-add-attr-and-artifactdir/</guid><description>Go testing包将迎来新增强：标准化属性与持久化构件API即将落地 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课...</description></item><item><title>WaitGroup.Go要来了？Go官方提案或让你告别Add和Done样板代码</title><link>https://tonybai.com/2025/04/03/waitgroup-go-proposal/</link><pubDate>Thu, 03 Apr 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/04/03/waitgroup-go-proposal/</guid><description>WaitGroup.Go要来了？Go官方提案或让你告别Add和Done样板代码 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言...</description></item><item><title>Go安全版图再添利器：OpenPubkey SSH开源，用SSO彻底改变SSH认证</title><link>https://tonybai.com/2025/03/31/openpubkey-ssh-open-source/</link><pubDate>Mon, 31 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/31/openpubkey-ssh-open-source/</guid><description>Go安全版图再添利器：OpenPubkey SSH开源，用SSO彻底改变SSH认证 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go...</description></item><item><title>Go模块发布流程再加固：go mod verify -tag提案详解</title><link>https://tonybai.com/2025/03/28/go-mod-verify-tag/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/28/go-mod-verify-tag/</guid><description>Go模块发布流程再加固：go mod verify -tag提案详解 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FA...</description></item><item><title>Go 1.25规范大扫除：移除“Core Types”，为更灵活的泛型铺路</title><link>https://tonybai.com/2025/03/27/remove-coretypes-from-go-spec/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/27/remove-coretypes-from-go-spec/</guid><description>Go 1.25规范大扫除：移除“Core Types”，为更灵活的泛型铺路 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶...</description></item><item><title>Go方法名的作用域：包级，但需间接调用</title><link>https://tonybai.com/2025/03/24/understand-methodname-scope/</link><pubDate>Mon, 24 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/24/understand-methodname-scope/</guid><description>Go方法名的作用域：包级，但需间接调用 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 文章列表 ...</description></item><item><title>体验Gemini Deep Research：以Go语言未来演进方向分析为例</title><link>https://tonybai.com/2025/03/16/gemini-deep-research-experience/</link><pubDate>Sun, 16 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/16/gemini-deep-research-experience/</guid><description>本文永久链接 – https://tonybai.com/2025/03/16/gemini-deep-research-experience 基于大模型的AI已进入深度思考时代，以DeepSeek R1模型为代表的开源模型给主流AI厂商带来了巨大压力。其实早在2024年12月份，Google就在一篇名为“Try Deep Research and our new experimental mod...</description></item><item><title>Anders Hejlsberg专访全文：TypeScript正在向Go移植</title><link>https://tonybai.com/2025/03/13/interview-with-anders-hejlsberg/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/13/interview-with-anders-hejlsberg/</guid><description>本文永久链接 – https://tonybai.com/2025/03/13/interview-with-anders-hejlsberg 昨天发表了《Anders Hejlsberg亲自操刀向Go语言移植！TypeScript编译器性能狂飙10倍！》一文后，收到了许多读者的反馈，其中最高频的问题是：为什么不选择Rust？为什么不使用C#等其他语言？为了帮助大家更好地理解这次“技术事件”，我整...</description></item><item><title>Anders Hejlsberg谈TypeScript编译器向Go移植的实践与规划</title><link>https://tonybai.com/2025/03/12/typescript-native-port-to-go/</link><pubDate>Wed, 12 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/12/typescript-native-port-to-go/</guid><description>Anders Hejlsberg谈TypeScript编译器向Go移植的实践与规划 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go...</description></item><item><title>构建高效的AI智能体[译]</title><link>https://tonybai.com/2025/03/11/building-effective-agents/</link><pubDate>Tue, 11 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/11/building-effective-agents/</guid><description>构建高效的AI智能体[译] - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 * 文章列表 构建高效的A...</description></item><item><title>深入GOCACHEPROG：Go构建缓存的自定义扩展</title><link>https://tonybai.com/2025/03/04/deep-dive-into-gocacheprog-custom-extensions-for-go-build-cache/</link><pubDate>Tue, 04 Mar 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/03/04/deep-dive-into-gocacheprog-custom-extensions-for-go-build-cache/</guid><description>本文永久链接 – https://tonybai.com/2025/03/04/deep-dive-into-gocacheprog-custom-extensions-for-go-build-cache 1. 背景 ----- 众所周知，Go build cache是在Go 1.10版本加入到Go工具链中的，缓存的主要目标是避免重复编译相同的代码，从而加快构建速度。 默认情况下，Go构建缓存位...</description></item><item><title>Go 1.24中值得关注的几个变化</title><link>https://tonybai.com/2025/02/16/some-changes-in-go-1-24/</link><pubDate>Sun, 16 Feb 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/02/16/some-changes-in-go-1-24/</guid><description>本文永久链接 – https://tonybai.com/2025/02/16/some-changes-in-go-1-24 北京时间2025年2月12日，恰逢中国传统元宵佳节，远在美国的Go团队正式发布了Go 1.24的第一个版本Go 1.24.0。这也是Go团队在更换Tech Leader为Austin Clements后发布的首个大版本。 按照惯例，每次Go大版本发布时，我都会撰写一篇“G...</description></item><item><title>关于Go错误处理新提案的一个想法：?操作符这样用行不行</title><link>https://tonybai.com/2025/02/08/personal-idea-about-using-question-mark-operator-in-go-error-handling-new-proposal/</link><pubDate>Sat, 08 Feb 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/02/08/personal-idea-about-using-question-mark-operator-in-go-error-handling-new-proposal/</guid><description>关于Go错误处理新提案的一个想法：?操作符这样用行不行 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我...</description></item><item><title>Go encoding/json/v2提案：JSON处理新引擎</title><link>https://tonybai.com/2025/02/05/go-encoding-json-v2-proposal-json-processing-new-engine/</link><pubDate>Wed, 05 Feb 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/02/05/go-encoding-json-v2-proposal-json-processing-new-engine/</guid><description>本文永久链接 – https://tonybai.com/2025/02/05/go-encoding-json-v2-proposal-json-processing-new-engine Go标准库中的encoding/json包，作为Go社区广泛使用的JSON处理工具，至今已走过十余年。凭借其将JSON数据与原生Go类型相互转换的能力、通过struct tag自定义字段表示的灵活性，以及Go...</description></item><item><title>Go导出标识符：那些鲜为人知的细节</title><link>https://tonybai.com/2025/01/23/the-hidden-details-of-go-exported-identifiers/</link><pubDate>Thu, 23 Jan 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/01/23/the-hidden-details-of-go-exported-identifiers/</guid><description>本文永久链接 – https://tonybai.com/2025/01/23/the-hidden-details-of-go-exported-identifiers 前不久，在“Go+用户组”微信群里看到有开发者向七牛云老板许式伟反馈七牛云Go SDK中的某些类型没有导出，导致外部包无法使用的问题(如下图)： 七牛开发人员迅速对该问题做出了“更正”，将问题反馈中涉及的类型saveasArgs...</description></item><item><title>探索Go gcflags的使用模式与完整参数选项列表</title><link>https://tonybai.com/2025/01/22/gcflags-options-list-and-usage/</link><pubDate>Wed, 22 Jan 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/01/22/gcflags-options-list-and-usage/</guid><description>探索Go gcflags的使用模式与完整参数选项列表 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 ...</description></item><item><title>Go工具链版本已不由你定：go和toolchain指令详解</title><link>https://tonybai.com/2025/01/14/understand-go-and-toolchain-in-go-dot-mod/</link><pubDate>Tue, 14 Jan 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/01/14/understand-go-and-toolchain-in-go-dot-mod/</guid><description>本文永久链接 – https://tonybai.com/2025/01/14/understand-go-and-toolchain-in-go-dot-mod Go语言自诞生以来，就一直将向后兼容性作为其核心理念之一。Go1兼容性承诺确保了为Go1.0编写的代码能够在后续的Go1.x版本中持续正确地编译和运行。这一承诺为Go的成功奠定了坚实的基础，它不仅保障了稳定性，也大大减轻了随着语言演进带...</description></item><item><title>2024年Go语言盘点：排名历史新高，团队新老传承</title><link>https://tonybai.com/2025/01/06/the-2024-review-of-go-programming-language/</link><pubDate>Mon, 06 Jan 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/01/06/the-2024-review-of-go-programming-language/</guid><description>2024年Go语言盘点：排名历史新高，团队新老传承 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ * 关于我 *...</description></item><item><title>探索基于pion开发的WebRTC应用的建连过程</title><link>https://tonybai.com/2024/12/26/exploring-the-connection-establish-process-of-webrtc-app-built-with-pion/</link><pubDate>Thu, 26 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/26/exploring-the-connection-establish-process-of-webrtc-app-built-with-pion/</guid><description>本文永久链接 – https://tonybai.com/2024/12/26/exploring-the-connection-establish-process-of-webrtc-app-built-with-pion 在《WebRTC第一课：从信令、ICE到NAT穿透的连接建立全流程》一文中，我们从理论层面全面细致地了解了WebRTC连接建立的完整流程。这个流程大致可以分为以下几个阶段： ...</description></item><item><title>使用issue2md将Github issue转换为Markdown</title><link>https://tonybai.com/2024/12/23/convert-github-issue-to-markdown-with-issue2md/</link><pubDate>Mon, 23 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/23/convert-github-issue-to-markdown-with-issue2md/</guid><description>使用issue2md将Github issue转换为Markdown | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表...</description></item><item><title>Go 1.24新特性前瞻：工具链和标准库</title><link>https://tonybai.com/2024/12/17/go-1-24-foresight-part2/</link><pubDate>Tue, 17 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/17/go-1-24-foresight-part2/</guid><description>本文永久链接 – https://tonybai.com/2024/12/17/go-1-24-foresight-part2 在上一篇文章中，我们介绍了即将于2025年2月发布的Go 1.24版本在语法、编译器和运行时方面的主要变化。本文将继续承接上文，重点介绍Go 1.24在工具链和标准库方面的重要更新，供大家参考。 1\. 工具链 ------- 1.1 go.mod新增tool指示符，支持...</description></item><item><title>Go 1.24新特性前瞻：语法、编译器与运行时</title><link>https://tonybai.com/2024/12/16/go-1-24-foresight-part1/</link><pubDate>Mon, 16 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/16/go-1-24-foresight-part1/</guid><description>Go 1.24新特性前瞻：语法、编译器与运行时 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go 1.24新特性...</description></item><item><title>WebRTC第一课：从信令、ICE到NAT穿透的连接建立全流程</title><link>https://tonybai.com/2024/12/14/webrtc-first-lesson-how-connection-estabish/</link><pubDate>Sat, 14 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/14/webrtc-first-lesson-how-connection-estabish/</guid><description>本文永久链接 – https://tonybai.com/2024/12/14/webrtc-first-lesson-how-connection-estabish 在上一篇文章《WebRTC第一课：网络架构与NAT工作原理》中，我们介绍了WebRTC的网络架构和NAT的基本概念，学习了WebRTC采用端对端（P2P）的通信模型，知道了NAT（网络地址转换）的概念以及给像WebRTC这样的直接P...</description></item><item><title>量子计算入门与Go模拟</title><link>https://tonybai.com/2024/12/11/simulate-quantum-computing-in-go/</link><pubDate>Wed, 11 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/11/simulate-quantum-computing-in-go/</guid><description>本文永久链接 – https://tonybai.com/2024/12/11/simulate-quantum-computing-in-go 2019年，Google宣布实现”量子霸权”，声称其53量子比特的量子计算机完成了一个经典超级计算机需要1万年才能完成的计算任务。这一宣告在当时引发了广泛关注和热议。而在这个过程中，我们也看到了太多对量子计算的误解。有人将其想象成**未来取代经典计算机的...</description></item><item><title>探索Docker默认网络NAT映射的分配与过滤行为</title><link>https://tonybai.com/2024/12/05/exploring-nat-mapping-assignment-and-filtering-behavior-of-docker-default-network/</link><pubDate>Thu, 05 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/05/exploring-nat-mapping-assignment-and-filtering-behavior-of-docker-default-network/</guid><description>本文永久链接 – https://tonybai.com/2024/12/05/exploring-nat-mapping-assignment-and-filtering-behavior-of-docker-default-network 在《WebRTC第一课：网络架构与NAT工作原理》一文中，我们对WebRTC的网路架构进行说明，了解到了NAT的工作原理、RFC 3489对NAT的四种传统...</description></item><item><title>惊！Go在十亿次循环和百万任务中表现不如Java，究竟为何？</title><link>https://tonybai.com/2024/12/02/why-go-sucks/</link><pubDate>Mon, 02 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/02/why-go-sucks/</guid><description>本文永久链接 – https://tonybai.com/2024/12/02/why-go-sucks 编程语言比较的话题总是能吸引程序员的眼球！ 近期外网的两篇编程语言对比的文章在国内程序员圈里引起热议。一篇是由Ben Dicken (@BenjDicken) 做的语言性能测试，对比了十多种主流语言在执行10亿次循环(一个双层循环：1万 \* 10 万)的速度；另一篇则是一个名为hez2010...</description></item><item><title>WebRTC第一课：网络架构与NAT工作原理</title><link>https://tonybai.com/2024/11/27/webrtc-first-lesson-network-architecture-and-how-nat-work/</link><pubDate>Wed, 27 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/27/webrtc-first-lesson-network-architecture-and-how-nat-work/</guid><description>本文永久链接 – https://tonybai.com/2024/11/27/webrtc-first-lesson-network-architecture-and-how-nat-work 2023年下旬，OpenAI与Livekit的合作在科技圈引起了不小的轰动。这两家公司联手，通过WebRTC技术和大型语言模型（LLM）的结合，使AI模型具有了看、听和说话的能力。这一举动不仅彰显了Web...</description></item><item><title>一文搞懂如何在Go包中支持Hash-Based Bisect调试</title><link>https://tonybai.com/2024/11/24/how-to-support-hash-based-bisect-in-go-package/</link><pubDate>Sun, 24 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/24/how-to-support-hash-based-bisect-in-go-package/</guid><description>本文永久链接 – https://tonybai.com/2024/mm/dd/how-to-support-hash-based-bisect-in-go-package bisect是一个英文动词，意为“二分”或“分成两部分”。在数学和计算机科学中，通常指将一个区间或一个集合分成两个相等的部分。 对于程序员来说，最熟悉的bisect应用莫过于下面两个： * 算法中的二分查找(binary se...</description></item><item><title>Go包构建：专家也未必了解的文件选择细节</title><link>https://tonybai.com/2024/11/21/go-source-file-selection-details-when-building-package/</link><pubDate>Thu, 21 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/21/go-source-file-selection-details-when-building-package/</guid><description>本文永久链接 – https://tonybai.com/2024/11/21/go-source-file-selection-details-when-building-package 在Go语言开发中，包（package）是代码组织的基本单位，也是基本的构建单元。Go编译器会将每个包构建成一个目标文件(.a)，然后通过链接器将这些目标文件链接在一起，形成最终的可执行程序。 尽管Go包的构建过...</description></item><item><title>走向合规：Go加密库对FIPS 140的支持</title><link>https://tonybai.com/2024/11/16/go-crypto-and-fips-140/</link><pubDate>Sat, 16 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/16/go-crypto-and-fips-140/</guid><description>本文永久链接 – https://tonybai.com/2024/11/16/go-crypto-and-fips-140 在今年3月份，Microsoft Azure团队宣布开设Go开发人员博客，旨在向开发者通报Microsoft在Go领域的最新动态，包括如何在Azure上部署Go工作负载以及与Go编程相关的文章。 然而，经过一段时间的关注，我发现该博客上的大多数文章都呈现出类似下图中的标题格...</description></item><item><title>Gotip安装：基于Go镜像代码仓库</title><link>https://tonybai.com/2024/11/15/install-gotip-using-go-repo-mirror/</link><pubDate>Fri, 15 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/15/install-gotip-using-go-repo-mirror/</guid><description>Gotip安装：基于Go镜像代码仓库 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Gotip安装：基于Go镜像代...</description></item><item><title>Go map使用Swiss Table重新实现，性能最高提升近50%</title><link>https://tonybai.com/2024/11/14/go-map-use-swiss-table/</link><pubDate>Thu, 14 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/14/go-map-use-swiss-table/</guid><description>本文永久链接 – https://tonybai.com/2024/11/14/go-map-use-swiss-table 在2024月11月5日的Go compiler and runtime meeting notes中，我们注意到了一段重要内容，如下图红框所示： 这表明，来自字节的一位工程师在两年多前提出的“使用Swiss table重新实现Go map”的建议即将落地，目前该issue已...</description></item><item><title>Go，15岁了[译]</title><link>https://tonybai.com/2024/11/12/go-turns-15/</link><pubDate>Tue, 12 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/12/go-turns-15/</guid><description>Go，15岁了\[译\] | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go，15岁了\[译\] ========...</description></item><item><title>Go编译的几个细节，连专家也要停下来想想</title><link>https://tonybai.com/2024/11/11/some-details-about-go-compilation/</link><pubDate>Mon, 11 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/11/some-details-about-go-compilation/</guid><description>本文永久链接 – https://tonybai.com/2024/11/11/some-details-about-go-compilation 在Go开发中，编译相关的问题看似简单，但实则蕴含许多细节。有时，即使是Go专家也需要停下来，花时间思考答案或亲自验证。本文将通过几个具体问题，和大家一起探讨Go编译过程中的一些你可能之前未曾关注的细节。 &amp;gt; 注：本文示例使用的环境为Go 1.23.0、...</description></item><item><title>从简单到强大：再次探索Caddy服务器的魅力</title><link>https://tonybai.com/2024/11/07/exploring-caddy/</link><pubDate>Thu, 07 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/07/exploring-caddy/</guid><description>本文永久链接 – https://tonybai.com/2024/11/07/exploring-caddy Go语言诞生十多年来，社区涌现出众多优秀的Web服务器和反向代理解决方案。其中，最引人注目的无疑是Caddy和Traefik。这两者都为开发者和系统管理员提供了更简单、更安全的现代化Web服务器和反向代理部署选项。尽管它们的目标略有不同，Caddy最初旨在满足开发者快速搭建反向代理的需求...</description></item><item><title>成为那个拿锤子的人</title><link>https://tonybai.com/2024/11/03/become-the-one-with-the-hammer/</link><pubDate>Sun, 03 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/03/become-the-one-with-the-hammer/</guid><description>成为那个拿锤子的人 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 成为那个拿锤子的人 ========= * 十一...</description></item><item><title>构建无密码认证：passkey入门与Go实现</title><link>https://tonybai.com/2024/11/01/introduction-to-passkey/</link><pubDate>Fri, 01 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/01/introduction-to-passkey/</guid><description>本文永久链接 – https://tonybai.com/2024/11/01/introduction-to-passkey 传统的密码认证一直以来都是数字时代的主流身份验证方式。然而，用户常常选择易记的弱密码并重复使用，导致账号易受攻击。密码泄露、钓鱼攻击等安全问题层出不穷，超过80%的数据泄露与密码相关。 截图来自FIDO联盟官网 与此同时，频繁的密码管理和忘记密码情况严重影响用户体验。服务...</description></item><item><title>写Go就像喝白开水</title><link>https://tonybai.com/2024/10/29/go-coding-is-like-drinking-boiled-water/</link><pubDate>Tue, 29 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/29/go-coding-is-like-drinking-boiled-water/</guid><description>写Go就像喝白开水 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 写Go就像喝白开水 ========= * 十月...</description></item><item><title>写出Go标准库级别文档注释的十个细节</title><link>https://tonybai.com/2024/10/27/ten-details-when-using-documentation-comments/</link><pubDate>Sun, 27 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/27/ten-details-when-using-documentation-comments/</guid><description>写出Go标准库级别文档注释的十个细节 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 写出Go标准库级别文档注释的十...</description></item><item><title>认知负荷对编程语言选择和学习的影响</title><link>https://tonybai.com/2024/10/24/cognitive-load-impact-on-programming-language-choice-and-study/</link><pubDate>Thu, 24 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/24/cognitive-load-impact-on-programming-language-choice-and-study/</guid><description>认知负荷对编程语言选择和学习的影响 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 认知负荷对编程语言选择和学习的影...</description></item><item><title>Go开发者的密码学导航：crypto库使用指南</title><link>https://tonybai.com/2024/10/19/go-crypto-package-design-deep-dive/</link><pubDate>Sat, 19 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/19/go-crypto-package-design-deep-dive/</guid><description>本文永久链接 – https://tonybai.com/2024/10/19/go-crypto-package-design-deep-dive Go号称“开箱即用”，这与其标准库的丰富功能和高质量是分不开的。而在Go标准库中，crypto库(包括crypto包、crypto目录下相关包以及golang.org/x/crypto下的补充包)又是Go社区最值得称道的Go库之一。 crypto库由...</description></item><item><title>智能时代临近：我眼中AI编程的现在与未来</title><link>https://tonybai.com/2024/10/14/programming-in-ai-era/</link><pubDate>Mon, 14 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/14/programming-in-ai-era/</guid><description>智能时代临近：我眼中AI编程的现在与未来 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 智能时代临近：我眼中AI编...</description></item><item><title>Go语言演进的双保险：GOEXPERIMENT与GODEBUG</title><link>https://tonybai.com/2024/10/11/go-evolution-dual-insurance-goexperiment-godebug/</link><pubDate>Fri, 11 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/11/go-evolution-dual-insurance-goexperiment-godebug/</guid><description>本文永久链接 – https://tonybai.com/2024/10/11/go-evolution-dual-insurance-goexperiment-godebug Go语言自诞生以来就以其简洁、高效和强大的并发支持而闻名，Go团队承诺保持Go1向后兼容性，以确保用户的代码在未来的版本中继续正常运行。然而，保持语言的稳定性与不断创新(增加新特性)之间的平衡一直是Go团队面临的挑战。为了...</description></item><item><title>代码提交者的代码评审通关指南[译]</title><link>https://tonybai.com/2024/10/11/the-cl-author-guide-to-getting-through-code-review/</link><pubDate>Fri, 11 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/11/the-cl-author-guide-to-getting-through-code-review/</guid><description>本文永久链接 – https://tonybai.com/2024/10/11/the-cl-author-guide-to-getting-through-code-review Google在软件工程领域对IT界做出了卓越的贡献，从《Google软件工程》，到Google Style Guides，再到The Change Author’s Guide。这些实践参考不仅提升了软件工程的标准，也...</description></item><item><title>Go语言的新时代：新领导团队和未来规划</title><link>https://tonybai.com/2024/10/10/pass-torch-to-go-new-leadership-team/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/10/pass-torch-to-go-new-leadership-team/</guid><description>Go语言的新时代：新领导团队和未来规划 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go语言的新时代：新领导团队...</description></item><item><title>与Thorsten Ball的共鸣：Go作为教学语言在技术写作中的优越性</title><link>https://tonybai.com/2024/10/09/resonating-with-thorsten-ball-on-go-in-technical-writing/</link><pubDate>Wed, 09 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/09/resonating-with-thorsten-ball-on-go-in-technical-writing/</guid><description>与Thorsten Ball的共鸣：Go作为教学语言在技术写作中的优越性 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章...</description></item><item><title>从DevOps到日常脚本：聊聊Go语言的多面性</title><link>https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts/</guid><description>本文永久链接 – https://tonybai.com/2024/10/08/go-languages-versatility-from-devops-to-daily-scripts 2024年初，TIOBE编程语言排行榜上，Go再次进入了前十，并在之后又成功冲高至第七名。 Go语言的排名上升，至少在Reddit Go论坛上帖子数量和在线人数上得到了体现，尽管目前与Rust热度仍有差距，但可见...</description></item><item><title>Go项目中使用Git Submodule，还有这个必要吗？</title><link>https://tonybai.com/2024/10/05/using-git-submodules-in-go-projects/</link><pubDate>Sat, 05 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/05/using-git-submodules-in-go-projects/</guid><description>Go项目中使用Git Submodule，还有这个必要吗？ | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go项目...</description></item><item><title>探索Go守护进程的实现方法</title><link>https://tonybai.com/2024/10/03/how-to-daemonize-go-program/</link><pubDate>Thu, 03 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/03/how-to-daemonize-go-program/</guid><description>探索Go守护进程的实现方法 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 探索Go守护进程的实现方法 ======...</description></item><item><title>为什么Canonical Import Path注释在Go中不再必要</title><link>https://tonybai.com/2024/10/02/why-canonical-import-paths-no-longer-necessary-in-go/</link><pubDate>Wed, 02 Oct 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/10/02/why-canonical-import-paths-no-longer-necessary-in-go/</guid><description>为什么Canonical Import Path注释在Go中不再必要 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表...</description></item><item><title>跟上Go演进步伐，你只需要关注这几件事儿</title><link>https://tonybai.com/2024/09/30/how-to-keep-up-with-go-evolution/</link><pubDate>Mon, 30 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/30/how-to-keep-up-with-go-evolution/</guid><description>跟上Go演进步伐，你只需要关注这几件事儿 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 跟上Go演进步伐，你只需要...</description></item><item><title>Go语言中的深拷贝：概念、实现与局限</title><link>https://tonybai.com/2024/09/28/understand-deep-copy-in-go/</link><pubDate>Sat, 28 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/28/understand-deep-copy-in-go/</guid><description>本文永久链接 – https://tonybai.com/2024/09/28/understand-deep-copy-in-go 前不久，在“Gopher部落”知识星球上回答了一个Gopher关于深拷贝(Deep Copy)的问题，让我感觉是时候探讨一下深拷贝技术了。 在日常开发工作中，深拷贝的使用频率相对较低，可能有80%的时间不需要使用深拷贝，只有在特定情况下才会遇到。这主要是因为大多数开...</description></item><item><title>“类型名称”在Go语言规范中的演变</title><link>https://tonybai.com/2024/09/24/the-evolution-of-type-name-in-go-spec/</link><pubDate>Tue, 24 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/24/the-evolution-of-type-name-in-go-spec/</guid><description>“类型名称”在Go语言规范中的演变 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 “类型名称”在Go语言规范中的演...</description></item><item><title>Go weak包前瞻：弱指针为内存管理带来新选择</title><link>https://tonybai.com/2024/09/23/go-weak-package-preview/</link><pubDate>Mon, 23 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/23/go-weak-package-preview/</guid><description>Go weak包前瞻：弱指针为内存管理带来新选择 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go weak包前...</description></item><item><title>htmx：Gopher走向全栈的完美搭档？</title><link>https://tonybai.com/2024/09/20/htmx-gopher-perfect-partner-for-full-stack/</link><pubDate>Fri, 20 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/20/htmx-gopher-perfect-partner-for-full-stack/</guid><description>本文永久链接 – https://tonybai.com/2024/09/20/htmx-gopher-perfect-partner-for-full-stack 在传统的Web开发领域，前端和后端开发通常被明确划分。前端主要负责用户界面的交互和视觉呈现，运用HTML、CSS和JavaScript等技术；后端则专注于服务器逻辑、数据库管理和核心功能实现，常用Go、Java、PHP、Ruby等语言...</description></item><item><title>Go unique包：突破字符串局限的通用值Interning技术实现</title><link>https://tonybai.com/2024/09/18/understand-go-unique-package-by-example/</link><pubDate>Wed, 18 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/18/understand-go-unique-package-by-example/</guid><description>本文永久链接 – https://tonybai.com/2024/09/18/understand-go-unique-package-by-example Go的1.23版本中引入了一个新的标准库包unique，为Go开发者带来了高效的值interning能力)。这种能力不仅适用于字符串类型值，还可应用于任何可比较(comparable)类型的值。 本文将简要探讨interning技术及其在G...</description></item><item><title>JSON包新提案：用“omitzero”解决编码中的空值困局</title><link>https://tonybai.com/2024/09/12/solve-the-empty-value-dilemma-in-json-encoding-with-omitzero/</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/12/solve-the-empty-value-dilemma-in-json-encoding-with-omitzero/</guid><description>JSON包新提案：用“omitzero”解决编码中的空值困局 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 JSO...</description></item><item><title>致敬：程序员成长路上的良师与经典著作</title><link>https://tonybai.com/2024/09/10/programmer-mentors-and-their-classic-works/</link><pubDate>Tue, 10 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/10/programmer-mentors-and-their-classic-works/</guid><description>本文永久链接 – https://tonybai.com/2024/09/10/programmer-mentors-and-their-classic-works 早上送孩子去幼儿园的路上，收到一个小伙伴的微信： 我这才意识到今天是教师节！为人师，自觉还不够格！但在这个特殊的日子，作为IT行业从业人员，我想向那些在计算机科学和编程领域给予我们启迪的“老师们”致敬。这些老师可能不是传统意义上站在讲...</description></item><item><title>重拾精髓：go doc -http让离线包文档浏览更便捷</title><link>https://tonybai.com/2024/09/06/go-doc-add-http-support/</link><pubDate>Fri, 06 Sep 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/09/06/go-doc-add-http-support/</guid><description>重拾精髓：go doc -http让离线包文档浏览更便捷 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 重拾精髓：...</description></item><item><title>Go 1.18之后的语法新特性Quiz，你能做对几个？</title><link>https://tonybai.com/2024/08/27/a-new-syntax-quiz-after-go-1-18/</link><pubDate>Tue, 27 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/27/a-new-syntax-quiz-after-go-1-18/</guid><description>Go 1.18之后的语法新特性Quiz，你能做对几个？ | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go 1.1...</description></item><item><title>从零开始编程：Go语言真的适合新手吗？</title><link>https://tonybai.com/2024/08/22/go-as-first-language/</link><pubDate>Thu, 22 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/22/go-as-first-language/</guid><description>从零开始编程：Go语言真的适合新手吗？ | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 从零开始编程：Go语言真的适...</description></item><item><title>Go 1.23中值得关注的几个变化</title><link>https://tonybai.com/2024/08/19/some-changes-in-go-1-23/</link><pubDate>Mon, 19 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/19/some-changes-in-go-1-23/</guid><description>本文永久链接 – https://tonybai.com/2024/08/19/some-changes-in-go-1-23 距离上一次Go 1.22版本发布又过去六个月了，我们如期迎来了Go 1.23版本的发布。 对于Go项目乃至整个Go社区而言，这个版本还有一点额外的意义，那就是这是Russ Cox作为Tech lead，领导Go团队发布的最后一个Go版本了。 8月2日，Russ Cox在g...</description></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><pubDate>Sat, 17 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true/</guid><description>都2024年了，当初那个“Go，互联网时代的C语言”的预言成真了吗？ | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表...</description></item><item><title>通过Go示例理解函数式编程思维</title><link>https://tonybai.com/2024/08/11/understand-functional-programming-in-go/</link><pubDate>Sun, 11 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/11/understand-functional-programming-in-go/</guid><description>本文永久链接 – https://tonybai.com/2024/08/11/understand-functional-programming-in-go &amp;gt; 一个孩子要尝试10次、20次才肯接受一种新的食物，我们接受一种新的范式，大概不会比这个简单。– 郭晓刚 《函数式编程思维》译者 函数式编程(Functional Programming, 简称fp)是一种编程范式，与命令式编程(Impe...</description></item><item><title>使用TLA+形式化验证Go并发程序</title><link>https://tonybai.com/2024/08/05/formally-verify-concurrent-go-programs-using-tla-plus/</link><pubDate>Mon, 05 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/05/formally-verify-concurrent-go-programs-using-tla-plus/</guid><description>本文永久链接 – https://tonybai.com/2024/08/05/formally-verify-concurrent-go-programs-using-tla-plus &amp;gt; Writing is nature’s way of letting you know how sloppy your thinking is – Guindon 在2024年6月份举办的GopherCon ...</description></item><item><title>Gopher Daily支持Feed订阅</title><link>https://tonybai.com/2024/08/04/gopherdaily-add-feed-support/</link><pubDate>Sun, 04 Aug 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/08/04/gopherdaily-add-feed-support/</guid><description>Gopher Daily支持Feed订阅 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Gopher Daily支...</description></item><item><title>Go语言中的SIMD加速：以矩阵加法为例</title><link>https://tonybai.com/2024/07/21/simd-in-go/</link><pubDate>Sun, 21 Jul 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/07/21/simd-in-go/</guid><description>本文永久链接 – https://tonybai.com/2024/07/21/simd-in-go 前些日子，一些资深Gopher，比如fasthttp的作者Aliaksandr Valialkin因函数迭代器加入Go 1.23版本而抱怨Go的演进走错了方向：朝着增加复杂性和隐式代码执行的方向发展，而没有专注于Go语言的基本设计哲学——简单性、生产力和性能。Valialkin希望Go团队能专注于...</description></item><item><title>通过实例理解SQL查询语句的执行顺序</title><link>https://tonybai.com/2024/07/20/sql-query-execution-order/</link><pubDate>Sat, 20 Jul 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/07/20/sql-query-execution-order/</guid><description>通过实例理解SQL查询语句的执行顺序 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 通过实例理解SQL查询语句的执...</description></item><item><title>通过实例理解Go访问和操作数据库的几种方式</title><link>https://tonybai.com/2024/07/15/understand-the-ways-to-access-databases-in-go/</link><pubDate>Mon, 15 Jul 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/07/15/understand-the-ways-to-access-databases-in-go/</guid><description>本文永久链接 – https://tonybai.com/2024/07/15/understand-the-ways-to-access-databases-in-go 关系数据库操作是Go应用开发中的重要一环，尤其是Go Web应用、微服务等。作为Gopher，我们需要了解几种主流的数据库访问和操作方法，以便在项目中做出适当的选择。 我个人在日常开发中较少涉及CRUD类应用，因此使用Go访问和...</description></item><item><title>Go语言编程指南翻译记：一本书，一支队伍，一段难忘的旅程</title><link>https://tonybai.com/2024/07/05/go-fundamentals-translation/</link><pubDate>Fri, 05 Jul 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/07/05/go-fundamentals-translation/</guid><description>Go语言编程指南翻译记：一本书，一支队伍，一段难忘的旅程 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go语言编...</description></item><item><title>Go与神经网络：手写数字识别</title><link>https://tonybai.com/2024/06/28/go-and-nn-part3-handwritten-digit-recognition/</link><pubDate>Fri, 28 Jun 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/06/28/go-and-nn-part3-handwritten-digit-recognition/</guid><description>本文永久链接 – https://tonybai.com/2024/06/28/go-and-nn-part3-handwritten-digit-recognition 在上一篇文章《Go与神经网络：线性回归》中，我们借由传统的机器学习方法：线性回归解决了房价预测问题。按照我初步设想的从传统机器学习到大语言模型的学习路线，是时候在这一篇中切换到学习**神经网络**了。 1\. 从线性回归到神经网...</description></item><item><title>Go 1.23中的自定义迭代器与iter包</title><link>https://tonybai.com/2024/06/24/range-over-func-and-package-iter-in-go-1-23/</link><pubDate>Mon, 24 Jun 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/06/24/range-over-func-and-package-iter-in-go-1-23/</guid><description>本文永久链接 – https://tonybai.com/2024/06/24/range-over-func-and-package-iter-in-go-1-23 在《Go 1.23新特性前瞻》一文中，我们提到了Go 1.23中增加的一个主要的语法特性就是**支持了用户自定义iterator**，即range over func试验特性的正式转正。为此，Go 1.23还在标准库中增加了iter...</description></item><item><title>Go团队的工作方式</title><link>https://tonybai.com/2024/06/22/how-things-get-done-on-the-go-team/</link><pubDate>Sat, 22 Jun 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/06/22/how-things-get-done-on-the-go-team/</guid><description>Go团队的工作方式 | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表 Go团队的工作方式 ========= * 六月...</description></item><item><title>Gopher的Rust第一课：Rust的依赖管理</title><link>https://tonybai.com/2024/06/16/gopher-rust-first-lesson-managing-deps/</link><pubDate>Sun, 16 Jun 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/06/16/gopher-rust-first-lesson-managing-deps/</guid><description>本文永久链接 – https://tonybai.com/2024/06/16/gopher-rust-first-lesson-managing-deps 在上一章《Gopher的Rust第一课：Rust代码组织》中，我们了解了Rust的代码组织形式，知道了基于Cargo构建项目以及Rust代码组织是目前的标准方式，同时Cargo也是管理项目外部依赖的标准方法，而项目内部的代码组织则由Rust ...</description></item><item><title>Go与神经网络：线性回归</title><link>https://tonybai.com/2024/06/10/go-and-nn-part2-linear-regression/</link><pubDate>Mon, 10 Jun 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/06/10/go-and-nn-part2-linear-regression/</guid><description>本文永久链接 – https://tonybai.com/2024/06/10/go-and-nn-part2-linear-regression 离发表上一篇与机器学习相关的文章《Go与神经网络：张量运算》已经过去整整一年了，AI领域，特别是大模型领域的热度不仅未有减弱，反而愈演愈烈。整个行业变得更卷，竞争更加激烈，大模型你方唱罢我登场，层出不穷，各自能力也都在不断提升，并在自然语言处理、问答、...</description></item><item><title>Gopher的Rust第一课：Rust代码组织</title><link>https://tonybai.com/2024/06/06/gopher-rust-first-lesson-organizing-rust-code/</link><pubDate>Thu, 06 Jun 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/06/06/gopher-rust-first-lesson-organizing-rust-code/</guid><description>本文永久链接 – https://tonybai.com/2024/06/06/gopher-rust-first-lesson-organizing-rust-code 在上一章的讲解中，我们编写了第一个Rust示例程序”hello, world”，并给出了rustc版和cargo版本。在真实开发中，我们都会使用cargo来创建和管理Rust包。不过，Hello, world示例非常简单，仅仅由...</description></item><item><title>Go 1.23新特性前瞻</title><link>https://tonybai.com/2024/05/30/go-1-23-foresight/</link><pubDate>Thu, 30 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/30/go-1-23-foresight/</guid><description>本文永久链接 – https://tonybai.com/2024/05/30/go-1-23-foresight 2024年5月22日，Go 1.23版本功能特性正式冻结，后续将只改bug，不增加新feature。 对Go团队来说，这意味着开始了Go 1.23rc1的冲刺，对我们普通Gopher而言，这意味着**是时候对Go 1.23新增的功能做一些前瞻了**！ 在Go没有发布Go 1.23rc...</description></item><item><title>Gopher的Rust第一课：第一个Rust程序</title><link>https://tonybai.com/2024/05/27/gopher-rust-first-lesson-first-rust-program/</link><pubDate>Mon, 27 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/27/gopher-rust-first-lesson-first-rust-program/</guid><description>本文永久链接 – https://tonybai.com/2024/05/27/gopher-rust-first-lesson-first-rust-program 经过上一章的学习，我想现在你已经成功安装好一个Rust开发环境了，是时候撸起袖子开始写Rust代码了！ 程序员这个历史并不算悠久的行当，却有着一个历史悠久的传统，那就是每种编程语言都将一个名为“hello, world”的示例作为这...</description></item><item><title>Go团队：Go是什么</title><link>https://tonybai.com/2024/05/19/what-the-go-team-think-go-is/</link><pubDate>Sun, 19 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/19/what-the-go-team-think-go-is/</guid><description>本文永久链接 – https://tonybai.com/2024/05/19/what-the-go-team-think-go-is 2024年的Google I/O大会如期而至。 这届大会的核心主旨毫无疑问是**坚定不移的以AI为中心**：Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro，然后面对OpenAI GPT-4o的挑衅，谷歌在大会上直接甩...</description></item><item><title>Go早期的那些布道者</title><link>https://tonybai.com/2024/05/17/the-early-evangelists-of-go/</link><pubDate>Fri, 17 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/17/the-early-evangelists-of-go/</guid><description>本文永久链接 – https://tonybai.com/2024/05/17/the-early-evangelists-of-go Go自2009年开源至今已经快15年了！这期间，有很多人对Go语言的发展做出了重要贡献，起到了至关重要的作用，他们被视为**Go语言的早期布道者和鼓吹者**。他们向Go社区传达着Go的价值观、Go的最新发展、Go的使用方法以及最佳实践。 这些人有来自Go团队的，有...</description></item><item><title>Gopher的Rust第一课：建立Rust开发环境</title><link>https://tonybai.com/2024/05/10/gopher-rust-first-lesson-setup-dev-env/</link><pubDate>Fri, 10 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/10/gopher-rust-first-lesson-setup-dev-env/</guid><description>本文永久链接 – https://tonybai.com/2024/05/10/gopher-rust-first-lesson-setup-dev-env 经过上一章的对Rust诞生演化的了解以及设计哲学的探讨后，如果你依然决定继续Rust编程学习之旅，那么欢迎你和我一起正式走进Rust学习和实践的课堂。 编程不是“纸上谈兵”，它是一门实践的艺术。编程语言的学习离不开动手实践，因此学习任何一门编...</description></item><item><title>使用Ollama和Go基于文本嵌入模型实现文本向量化</title><link>https://tonybai.com/2024/05/09/text-vectorization-using-ollama-and-go-based-on-text-embedding-models/</link><pubDate>Thu, 09 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/09/text-vectorization-using-ollama-and-go-based-on-text-embedding-models/</guid><description>本文永久链接 – https://tonybai.com/2024/05/09/text-vectorization-using-ollama-and-go-based-on-text-embedding-models 基于RAG+大模型的应用已经成为当前AI应用领域的一个热门方向。RAG(Retrieval-Augmented Generation)将检索和生成两个步骤相结合，利用外部知识库来增...</description></item><item><title>那些可免费使用的在线大语言模型服务</title><link>https://tonybai.com/2024/05/06/those-free-to-use-online-llm-services/</link><pubDate>Mon, 06 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/06/those-free-to-use-online-llm-services/</guid><description>本文永久链接 – https://tonybai.com/2024/05/06/those-free-to-use-online-llm-services 2022年底以ChatGPT为代表的大语言模型的出现掀起了人工智能应用的新浪潮。这些庞大的语言模型经过对海量文本数据的训练，能够理解和生成逼近人类水平的自然语言，在对话、问答、文本生成、代码编写等领域展现出了惊人的能力。 最初这种能力“垄断”在...</description></item><item><title>Go未用代码消除与可执行文件瘦身</title><link>https://tonybai.com/2024/05/05/dead-code-elimination-and-executable-file-slimming-in-go/</link><pubDate>Sun, 05 May 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/05/05/dead-code-elimination-and-executable-file-slimming-in-go/</guid><description>本文永久链接 – https://tonybai.com/2024/05/05/dead-code-elimination-and-executable-file-slimming-in-go 在日常编写Go代码时，我们会编写很多包，也会在编写的包中引入了各种依赖包。在大型Go工程中，这些直接依赖和间接依赖的包数目可能会有几十个甚至上百个。依赖包有大有小，但通常我们不会使用到依赖包中的所有导出函数...</description></item><item><title>从零到生产：Go在Google的历程[译]</title><link>https://tonybai.com/2024/04/24/go-journey-at-google/</link><pubDate>Wed, 24 Apr 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/04/24/go-journey-at-google/</guid><description>本文永久链接 – https://tonybai.com/2024/04/24/go-journey-at-google 2007年Go诞生于Google，2009年Google正式对外宣布了Go语言的开源！时至今日，距离Go开源已经过去了近15个年头了！Go在Google公司内部究竟是怎样的一个状态呢？前Google员工Yves Junqueira近期撰文从其个人所见所闻谈了Go在Google的...</description></item><item><title>使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B</title><link>https://tonybai.com/2024/04/23/playing-with-meta-llama3-8b-on-cpu-using-ollama-and-openwebui/</link><pubDate>Tue, 23 Apr 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/04/23/playing-with-meta-llama3-8b-on-cpu-using-ollama-and-openwebui/</guid><description>本文永久链接 – https://tonybai.com/2024/04/23/playing-with-meta-llama3-8b-on-cpu-using-ollama-and-openwebui 2024年4月18日，meta开源了Llama 3大模型，虽然只有8B和70B两个版本，但Llama 3表现出来的强大能力还是让AI大模型界为之震撼了一番，本人亲测Llama3-70B版本的推理能...</description></item><item><title>Gopher的Rust第一课：Rust的那些事儿</title><link>https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust/</link><pubDate>Mon, 22 Apr 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust/</guid><description>本文永久链接 – https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust 要说这两年后端编程语言谁最火，Rust说自己第二，没人敢说第一。Rust连续8年霸榜stackoverflow最受推崇的编程语言，甚至被推特之父Jack Dorsey称为“完美的编程语言”： &amp;gt; 注：最火：仅代表人气最旺，最受欢迎，但并不代...</description></item><item><title>要么返回错误值，要么输出日志，别两样都做</title><link>https://tonybai.com/2024/04/14/either-return-error-or-log-them-do-not-do-both/</link><pubDate>Sun, 14 Apr 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/04/14/either-return-error-or-log-them-do-not-do-both/</guid><description>本文永久链接 – https://tonybai.com/2024/04/14/either-return-error-or-log-them-do-not-do-both 1\. 缘起 ------ 这周，一个产品团队内进行Go代码评审时，得到了一个结论：所有的if err != nil的地方都应该输出错误日志。然而，这种做法并不是最佳实践，它存在一些问题。 首先，打印过多的错误日志会导致日志文...</description></item><item><title>选择正确的Go Module Path</title><link>https://tonybai.com/2024/04/09/choose-the-right-go-module-path/</link><pubDate>Tue, 09 Apr 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/04/09/choose-the-right-go-module-path/</guid><description>本文永久链接 – https://tonybai.com/2024/04/09/choose-the-right-go-module-path 最近我在查看项目代码时，注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法，相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为modu...</description></item><item><title>Go 1.22引入的包级变量初始化次序问题</title><link>https://tonybai.com/2024/03/29/the-issue-in-pkg-level-var-init-order-in-go-1-22/</link><pubDate>Fri, 29 Mar 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/03/29/the-issue-in-pkg-level-var-init-order-in-go-1-22/</guid><description>本文永久链接 – https://tonybai.com/2024/03/29/the-issue-in-pkg-level-var-init-order-in-go-1-22 细心的朋友可能已经注意到，从春节后，我的博客就“停更”了！实际上，这一情况部分是因为工作上的事务繁忙，另一部分则是因为我将工作之外的闲暇时间更多地投入到一本即将于今年中下旬出版的书的撰写了：在之前的积累基础上，我花了两个多...</description></item><item><title>Go 1.22中值得关注的几个变化</title><link>https://tonybai.com/2024/02/18/some-changes-in-go-1-22/</link><pubDate>Sun, 18 Feb 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/02/18/some-changes-in-go-1-22/</guid><description>本文永久链接 – https://tonybai.com/2024/02/18/some-changes-in-go-1-22 美国时间2024年2月6日，正当中国人民洋溢在即将迎来龙年春节的喜庆祥和的气氛中时，Eli Bendersky代表Go团队在Go官博发文“Go 1.22 is released!”，正式向世界宣告了Go 1.22版本的发布！ &amp;gt; 注：大家可以从Go官网下载Go 1.22的...</description></item><item><title>2024年的Rust与Go[译]</title><link>https://tonybai.com/2024/01/24/rust-vs-go-in-2024/</link><pubDate>Wed, 24 Jan 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/01/24/rust-vs-go-in-2024/</guid><description>本文永久链接 – https://tonybai.com/2024/01/24/rust-vs-go-in-2024 本文译自《Rust vs Go in 2024》。 * * * 我可以说些什么而不让大家生气吗？ Rust和Go哪个更好？你应该为下一个项目选择哪种语言，为什么？两者在性能、简单性、安全性、功能特性、规模化(scale)和并发性等方面如何比较？它们有什么共同点，又有什么根本区别？让...</description></item><item><title>依赖Kafka的Go单元测试例解</title><link>https://tonybai.com/2024/01/08/go-unit-testing-deps-on-kafka/</link><pubDate>Mon, 08 Jan 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/01/08/go-unit-testing-deps-on-kafka/</guid><description>本文永久链接 – https://tonybai.com/2024/01/08/go-unit-testing-deps-on-kafka Kafka是Apache基金会开源的一个分布式事件流处理平台，是Java阵营(最初为Scala)中的一款杀手级应用，其提供的高可靠性、高吞吐量和低延迟的数据传输能力，让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。 在日常开发Go程...</description></item><item><title>Go语言之父的反思：我们做对了什么，做错了什么</title><link>https://tonybai.com/2024/01/07/what-we-got-right-what-we-got-wrong/</link><pubDate>Sun, 07 Jan 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/01/07/what-we-got-right-what-we-got-wrong/</guid><description>本文永久链接 – https://tonybai.com/2024/01/07/what-we-got-right-what-we-got-wrong 在《2023年Go语言盘点：稳中求新，稳中求变》和《Go测试的20个实用建议》两篇文章中，我都提到过已经退居二线的Go语言之父Rob Pike在Go开源14周年的那天亲自在GopherCon Australia 2023上发表了“What We G...</description></item><item><title>Go测试的20个实用建议</title><link>https://tonybai.com/2024/01/01/go-testing-by-example/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/01/01/go-testing-by-example/</guid><description>本文永久链接 – https://tonybai.com/2024/01/01/go-testing-by-example 2023年11月初，Go语言技术负责人Russ Cox在GopherCon Australia 2023大会上进行了题为“Go Testing By Example”的演讲： 12月初Russ Cox重新录制了该演讲内容的视频，并在个人网站上放了出来。这个演讲视频是关于如何编...</description></item><item><title>2023年Go语言盘点：稳中求新，稳中求变</title><link>https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language/</link><pubDate>Sun, 31 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language/</guid><description>本文永久链接 – https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language 时光荏苒，转眼间已经是2023年的最后一天了。《2022年Go语言盘点：泛型落地，无趣很好，稳定为王》仿佛就写在昨天。 回首这一年，全球彻底从新冠大流行中得以复苏，Go语言也不例外，最直观的表现就是**全球各地的GopherCon技术...</description></item><item><title>Go 1.22新特性前瞻</title><link>https://tonybai.com/2023/12/25/go-1-22-foresight/</link><pubDate>Mon, 25 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/25/go-1-22-foresight/</guid><description>本文永久链接 – https://tonybai.com/2023/12/25/go-1-22-foresight 美国时间2023年12月20日，Go官方宣布Go 1.22rc1发布，开启了为期2个多月的、常规的公测之旅，Go 1.22预计将于2024.2月份正式发布！ 除了在官网下载Go 1.22rc1版本进行新特性体验之外，我们还可以通过在线的Go Playground选择“Go dev b...</description></item><item><title>通过实例理解OpenID身份认证</title><link>https://tonybai.com/2023/12/22/understand-oidc-by-example/</link><pubDate>Fri, 22 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/22/understand-oidc-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/12/22/understand-oidc-by-example 在《通过实例理解OAuth2》一文中，我们以实例方式讲解了OAuth2授权码模式(Authorization Code)模式的工作原理。实例中的照片冲印服务经过用户(tonybai)的授权后，使用用户提供的code(实则是由授权服务器分配并通过用户的浏览器重定向到照...</description></item><item><title>通过实例理解OAuth2授权</title><link>https://tonybai.com/2023/12/16/understand-oauth2-by-example/</link><pubDate>Sat, 16 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/16/understand-oauth2-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/12/16/understand-oauth2-by-example 在之前的《通过实例理解Go Web身份认证的几种方式》和《通过实例理解Web应用授权的几种方式》两篇文章中，我们对Web应用身份认证(AuthN)和授权(AuthZ)的几种方式做了介绍并配以实例增强理解。 在现实世界中，还有一大类的认证与授权是在前面的文章中没有...</description></item><item><title>简单之道</title><link>https://tonybai.com/2023/12/11/simplicity/</link><pubDate>Mon, 11 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/11/simplicity/</guid><description>本文永久链接 – https://tonybai.com/2023/12/11/simplicity 已经退居二线的Go语言之父Rob Pike近日发表了一篇名为“Simplicity”的博文，记述了2009年在Google内部一次圆桌会议上发表的演讲内容。Pike老先生在这个时间点发表这篇文章究竟有何深意呢？是对Go语言演进的路线有所不满吗？我们不得而知。不过，这篇文章的内容却是非常值得我们学习...</description></item><item><title>Go未来演进：基于共同目标和数据驱动的决策</title><link>https://tonybai.com/2023/12/10/go-changes/</link><pubDate>Sun, 10 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/10/go-changes/</guid><description>本文永久链接 – https://tonybai.com/2023/12/10/go-changes 自从Go语言之父Rob Pike从Google退休并隐居澳洲后，Russ Cox便成为了Go语言团队的“带头大哥”，虽然其资历还无法与依旧奋战在一线的另外一位Go语言之父Robert Griesemer相比。如今，Russ Cox对Go语言未来的演化发展是很有“发言权”的，Go module的引入...</description></item><item><title>有效表达软件架构的最小图集</title><link>https://tonybai.com/2023/12/06/a-minimum-set-of-diagrams-for-expressing-software-architecture/</link><pubDate>Wed, 06 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/06/a-minimum-set-of-diagrams-for-expressing-software-architecture/</guid><description>本文永久链接 – https://tonybai.com/2023/12/06/a-minimum-set-of-diagrams-for-expressing-software-architecture 无论你是专职的软件架构师，还是在团队内兼职充当软件架构师角色的开发人员，一旦你处在软件架构师这个位置上，你自然就会遇到软件架构设计的三个困惑： * 如何更深刻地理解业务； * 如何更正确地取舍(...</description></item><item><title>通过实例理解API网关的主要功能特性</title><link>https://tonybai.com/2023/12/03/understand-api-gateway-main-functional-features-by-example/</link><pubDate>Sun, 03 Dec 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/12/03/understand-api-gateway-main-functional-features-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/12/03/understand-api-gateway-main-functional-features-by-example 在当今的技术领域中，“下云”的概念正逐渐抬头，像David Heinemeier Hansson(37signals公司的联合创始人, Ruby on Rails的Creator)就直接将公司所有的业务...</description></item><item><title>Go语言gRPC服务Handler单元测试详解</title><link>https://tonybai.com/2023/11/25/grpc-handler-unit-testing-in-go/</link><pubDate>Sat, 25 Nov 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/11/25/grpc-handler-unit-testing-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/11/25/grpc-handler-unit-testing-in-go 在云原生时代和微服务架构背景下，HTTP和RPC协议成为服务间通信和与客户端交互的两种主要方式。对于Go语言而言，标准库提供了net/http/httptest包，为开发人员提供了便捷的方式来构建服务端HTTP Handler单元测试的测试脚手架代码，而无...</description></item><item><title>通过实例理解Web应用跨域问题</title><link>https://tonybai.com/2023/11/19/understand-go-web-cross-origin-problem-by-example/</link><pubDate>Sun, 19 Nov 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/11/19/understand-go-web-cross-origin-problem-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/11/19/understand-go-web-cross-origin-problem-by-example 在开发Web应用的过程中，我们经常会遇到所谓“跨域问题(Cross Origin Problem)”。跨域问题是由于浏览器的同源策略(Same-origin policy)导致的，它限制了不同源(Origin：域名、协议...</description></item><item><title>关系代数、SQL语句和Go语言示例</title><link>https://tonybai.com/2023/11/15/relational-algebra-and-sql-with-go-examples/</link><pubDate>Wed, 15 Nov 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/11/15/relational-algebra-and-sql-with-go-examples/</guid><description>本文永久链接 – https://tonybai.com/2023/11/15/relational-algebra-and-sql-with-go-examples 近些年，数据库领域发展日新月异，除传统的关系型数据库外，还出现了许多新型的数据库，比如：以HBase、Cassandra、MongoDB为代表的NoSQL数据库，以InfluxDB、TDEngine为代表的时序数据库，以Neo4J、...</description></item><item><title>Go，14周年[译]</title><link>https://tonybai.com/2023/11/11/go-opensource-14-years/</link><pubDate>Sat, 11 Nov 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/11/11/go-opensource-14-years/</guid><description>本文永久链接 – https://tonybai.com/2023/11/11/go-opensource-14-years 国内的双十一购物狂欢已没有了当年的那种热闹与喧嚣，但大洋彼岸的Go团队却始终保持稳中有增的开发和语言演进节奏。今晨Go核心团队的Russ Cox代表Go语言项目团队在Go官博上发表了《Fourteen Years of Go》的博文，纪念Go语言开源14周年，并对2023年...</description></item><item><title>通过实例理解Web应用的机密管理</title><link>https://tonybai.com/2023/11/08/understand-go-web-secret-management-by-example/</link><pubDate>Wed, 08 Nov 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/11/08/understand-go-web-secret-management-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/11/08/understand-go-web-secret-management-by-example 如果你是一个Web应用系统的开发人员，你的日常大概率是“乐此不疲”地做着CRUD的活儿，很少接触到安全方面的内容。如果这时有人和你提到“机密(信息)管理(secret management)”，你大概率会说：那是啥？和我有关系...</description></item><item><title>通过实例理解Web应用授权的几种方式</title><link>https://tonybai.com/2023/11/04/understand-go-web-authz-by-example/</link><pubDate>Sat, 04 Nov 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/11/04/understand-go-web-authz-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/11/04/understand-go-web-authz-by-example 在前面的系列文章中，我们了解了Go Web应用身份认证的几种方式，也知道了该如何相对安全地存储用户的密码信息，最大程度减小在系统数据库被攻破时用户密码信息的泄露程度。 一旦用户通过身份验证，他/她就可以以合法的身份进入到系统中，那么问题来了：**用户...</description></item><item><title>通过实例理解Web应用用户密码存储方案</title><link>https://tonybai.com/2023/10/25/understand-password-storage-of-web-app-by-example/</link><pubDate>Wed, 25 Oct 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/10/25/understand-password-storage-of-web-app-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/10/25/understand-password-storage-of-web-app-by-example 在上一篇文章《通过实例理解Go Web身份认证的几种方式》中，我们了解了Web应用的多种身份验证方式。但无论哪种方式，用户初次访问Web应用的注册流程和登录流程是不可避免的，而基于用户名密码的注册流程依旧是当今主流。注册...</description></item><item><title>通过实例理解Go Web身份认证的几种方式</title><link>https://tonybai.com/2023/10/23/understand-go-web-authn-by-example/</link><pubDate>Mon, 23 Oct 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/10/23/understand-go-web-authn-by-example/</guid><description>本文永久链接 – https://tonybai.com/2023/10/23/understand-go-web-authn-by-example 在2023年Q1 Go官方用户调查报告中，API/RPC services、Websites/web services都位于使用Go开发的应用类别的头部(如下图)： 我个人使用Go开发已很多年，但一直从事底层基础设施、分布式中间件等方向，Web应用开...</description></item><item><title>基于公钥验签实现应用许可机制</title><link>https://tonybai.com/2023/10/16/implementation-of-app-licensing-based-on-verifying-sign-by-pubkey/</link><pubDate>Mon, 16 Oct 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/10/16/implementation-of-app-licensing-based-on-verifying-sign-by-pubkey/</guid><description>本文永久链接 – https://tonybai.com/2023/10/16/implementation-of-app-licensing-based-on-verifying-sign-by-pubkey 随着互联网的普及以及应用的快速发展，商业软件的订阅模式变得越来越流行。软件公司开始提供基于订阅的服务，用户每月或每年支付费用以获取软件的使用权。这种模式使用户可以更灵活地选择服务期限，并且...</description></item><item><title>Go TLS服务端绑定证书的几种方式</title><link>https://tonybai.com/2023/10/13/multiple-ways-to-bind-certificates-on-go-tls-server-side/</link><pubDate>Fri, 13 Oct 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/10/13/multiple-ways-to-bind-certificates-on-go-tls-server-side/</guid><description>本文永久链接 – https://tonybai.com/2023/10/13/multiple-ways-to-bind-certificates-on-go-tls-server-side 随着互联网的发展，网站提供的服务类型和规模不断扩大，同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)已然成为Web服务最重要的安全基础设施之一。默认情况...</description></item><item><title>Service Weaver：以单体形式编码，以微服务形式部署</title><link>https://tonybai.com/2023/10/09/service-weaver-coding-in-monolithic-deploy-in-microservices/</link><pubDate>Mon, 09 Oct 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/10/09/service-weaver-coding-in-monolithic-deploy-in-microservices/</guid><description>本文永久链接 – https://tonybai.com/2023/10/09/service-weaver-coding-in-monolithic-deploy-in-microservices 分布式应用的主流架构模式演化为**微服务架构**已经有些年头了。微服务、DevOps、持续交付和容器技术(k8s)是构成最初云原生概念的核心要素。它们相生相拌，共同演进，并推动了云计算**全面进入云原...</description></item><item><title>Go项目目录该怎么组织？官方终于出指南了！</title><link>https://tonybai.com/2023/10/05/the-official-guide-of-organizing-go-project/</link><pubDate>Thu, 05 Oct 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/10/05/the-official-guide-of-organizing-go-project/</guid><description>本文永久链接 – https://tonybai.com/2023/10/05/the-official-guide-of-organizing-go-project 长久以来，在Go语言进阶的学习和实践之路上，Go项目目录究竟如何布局一直是困扰大家的一个问题，这是因为Go官方针对这个问题迟迟没有给出说法，更没有提供标准供大家参考。仅有Go语言项目技术负责人Russ Cox在一个开源项目的issu...</description></item><item><title>聊聊Go与依赖注入</title><link>https://tonybai.com/2023/09/28/dependency-injection-with-go/</link><pubDate>Thu, 28 Sep 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/09/28/dependency-injection-with-go/</guid><description>本文永久链接 – https://tonybai.com/2023/09/28/dependency-injection-with-go 如果你读过Robert C. Martin的《敏捷软件开发：原则、模式与实践》(书的封皮见下图)，那么你一定知道经典的SOLID设计原则中的“D”：依赖倒置原则（Dependency Inversion Principle, DIP）。 依赖倒置原则是面向对象设...</description></item><item><title>使用Go和WebRTC data channel实现端到端实时通信</title><link>https://tonybai.com/2023/09/23/p2p-rtc-implementation-with-go-and-webrtc-data-channel/</link><pubDate>Sat, 23 Sep 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/09/23/p2p-rtc-implementation-with-go-and-webrtc-data-channel/</guid><description>本文永久链接 – https://tonybai.com/2023/09/23/p2p-rtc-implementation-with-go-and-webrtc-data-channel 关于实时通信(RTC，Real-Time Communication)，我和大多数人一样，是用的多(比如网络电话、音视频会议等)，但对RTC概念和其底层技术原理了解的却不多。近期，一项目恰用到了RTC技术，我就...</description></item><item><title>聊聊Go语言的向前兼容性和toolchain规则</title><link>https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/</link><pubDate>Sun, 10 Sep 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/</guid><description>本文永久链接 – https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule Go语言在发展演进过程中一直十分注重向后兼容性(backward compatibility)，在Go 1.0版本发布之初就发布了Go1兼容性承诺，简单来说就是保证使用新版本Go(比如Go 1.21版本)可以正...</description></item><item><title>slog实战：文件日志、轮转与kafka集成</title><link>https://tonybai.com/2023/09/04/slog-in-action-file-logging-rotation-and-kafka-integration/</link><pubDate>Mon, 04 Sep 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/09/04/slog-in-action-file-logging-rotation-and-kafka-integration/</guid><description>本文永久链接 – https://tonybai.com/2023/09/04/slog-in-action-file-logging-rotation-and-kafka-integration 《slog正式版来了：Go日志记录新选择！》一文发布后，收到了很多读者的反馈，意见集中在以下几点： * 基于slog如何将日志写入文件 * slog是否支持log轮转(rotation)，如果slog不...</description></item><item><title>slog正式版来了：Go日志记录新选择！</title><link>https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go/</link><pubDate>Fri, 01 Sep 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go 在大约一年前，我就写下了《slog：Go官方版结构化日志包》一文，文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包：slog。但slog并未如预期在Go 1.20版本中落地，而是在golang.org/x/exp/slo...</description></item><item><title>编译Go应用的黑盒挑战：无源码只有.a文件，你能搞定吗？</title><link>https://tonybai.com/2023/08/30/how-to-build-with-only-archive-in-go/</link><pubDate>Wed, 30 Aug 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/08/30/how-to-build-with-only-archive-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/08/30/how-to-build-with-only-archive-in-go 上周末，一个Gopher在微信上与我交流了一个有关Go程序编译的问题。他的述求说起来也不复杂，那就是合作公司提供的API包仅包括golang archive(使用go build -buildmode=archive构建的.a文件)，没有Go包的...</description></item><item><title>Go 1.21中值得关注的几个变化</title><link>https://tonybai.com/2023/08/20/some-changes-in-go-1-21/</link><pubDate>Sun, 20 Aug 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/08/20/some-changes-in-go-1-21/</guid><description>本文永久链接 – https://tonybai.com/2023/08/20/some-changes-in-go-1-21 美国时间2023年8月8日，Go团队在Go官博上正式发布了1.21版本！ 早在今年4月末，我就撰写了文章《Go 1.21新特性前瞻》，对Go 1.21可能引入的新特性、新优化和新标准库包做了粗略梳理。 在6月初举办的GopherChina 2023大会上，我又以“The ...</description></item><item><title>Go项目初始化不再困扰你：gonew全方位解析</title><link>https://tonybai.com/2023/08/11/introduction-to-the-gonew-tool/</link><pubDate>Fri, 11 Aug 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/08/11/introduction-to-the-gonew-tool/</guid><description>本文永久链接 – https://tonybai.com/2023/08/11/introduction-to-the-gonew-tool 近日，Go官博介绍了一个名为gonew的新工具。该工具支持基于go project template clone并创建一个属于你的Go项目。gonew工具的引入大幅简化了Go项目的创建，同时由于对自定义项目模板的支持，也可以提高Go项目的标准化水平。gone...</description></item><item><title>Gopher Daily改版了</title><link>https://tonybai.com/2023/08/06/gopherdaily-revamped/</link><pubDate>Sun, 06 Aug 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/08/06/gopherdaily-revamped/</guid><description>本文永久链接 – https://tonybai.com/2023/08/06/gopherdaily-revamped 已经记不得GopherDaily是何时创建的了，翻了一下GopherDaily项目的commit history，才发现我的这个个人项目是2019年9月创建的，最初内容组织很粗糙，但我的编辑制作的热情很高，基本能坚持**每日一发**，甚至节假日也**不停刊**： 该项目的初衷就...</description></item><item><title>Go语言开发者的Apache Arrow使用指南：读写Parquet文件</title><link>https://tonybai.com/2023/07/31/a-guide-of-using-apache-arrow-for-gopher-part6/</link><pubDate>Mon, 31 Jul 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/07/31/a-guide-of-using-apache-arrow-for-gopher-part6/</guid><description>本文永久链接 – https://tonybai.com/2023/07/31/a-guide-of-using-apache-arrow-for-gopher-part6 Apache Arrow是一种开放的、与语言无关的列式内存格式，在本系列文章的前几篇中，我们都聚焦于内存表示与内存操作。 但对于一个数据库系统或大数据分析平台来说，数据不能也无法一直放在内存中，虽说目前内存很大也足够便宜了，但...</description></item><item><title>Go语言开发者的Apache Arrow使用指南：扩展compute包</title><link>https://tonybai.com/2023/07/22/a-guide-of-using-apache-arrow-for-gopher-part5/</link><pubDate>Sat, 22 Jul 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/07/22/a-guide-of-using-apache-arrow-for-gopher-part5/</guid><description>本文永久链接 – https://tonybai.com/2023/07/22/a-guide-of-using-apache-arrow-for-gopher-part5 在本系列文章的第4篇《Go语言开发者的Apache Arrow使用指南：数据操作》中我们遇到了**大麻烦**：Go的Arrow实现居然不支持像max、min、sum这样的简单聚合计算函数:(，分组聚合(grouped aggr...</description></item><item><title>使用testify包辅助Go测试指南</title><link>https://tonybai.com/2023/07/16/the-guide-of-go-testing-with-testify-package/</link><pubDate>Sun, 16 Jul 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/07/16/the-guide-of-go-testing-with-testify-package/</guid><description>本文永久链接 – https://tonybai.com/2023/07/16/the-guide-of-go-testing-with-testify-package 我虽然算不上Go标准库的“清教徒”，但在测试方面还多是基于标准库testing包以及go test框架的，除了需要mock的时候，基本上没有用过第三方的Go测试框架。我在《Go语言精进之路》一书中对Go测试组织的讲解也是基于Go ...</description></item><item><title>Go语言开发者的Apache Arrow使用指南：数据操作</title><link>https://tonybai.com/2023/07/13/a-guide-of-using-apache-arrow-for-gopher-part4/</link><pubDate>Thu, 13 Jul 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/07/13/a-guide-of-using-apache-arrow-for-gopher-part4/</guid><description>本文永久链接 – https://tonybai.com/2023/07/13/a-guide-of-using-apache-arrow-for-gopher-part4 在前面的Arrow系列文章中，我们介绍了Arrow的基础数据类型以及高级数据类型，这让我们具备了在内存中建立起一个immutable数据集的能力。但这并非我们的目标，我们最终是要对建立起来的数据集进行查询和分析等操作(mani...</description></item><item><title>Go语言开发者的Apache Arrow使用指南：高级数据结构</title><link>https://tonybai.com/2023/07/08/a-guide-of-using-apache-arrow-for-gopher-part3/</link><pubDate>Sat, 08 Jul 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/07/08/a-guide-of-using-apache-arrow-for-gopher-part3/</guid><description>本文永久链接 – https://tonybai.com/2023/07/08/a-guide-of-using-apache-arrow-for-gopher-part3 经过对前面两篇文章《Arrow数据类型》和《Arrow Go实现的内存管理》的学习，我们知道了各种Arrow array type以及它们在内存中的layout，我们了解了Go arrow实现在内存管理上的一些机制和使用原则。...</description></item><item><title>Apache Arrow：驱动列式分析性能和连接性的提升[译]</title><link>https://tonybai.com/2023/07/01/arrow-columnar-analytics/</link><pubDate>Sat, 01 Jul 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/07/01/arrow-columnar-analytics/</guid><description>本文永久链接 – https://tonybai.com/2023/07/01/arrow-columnar-analytics 本文翻译自Voltron Data公司CTO Wes McKinney的文章《Apache Arrow: Driving Columnar Analytics Performance and Connectivity》。这篇文章回顾了现代大数据分析遇到的问题、Arrow...</description></item><item><title>Go语言开发者的Apache Arrow使用指南：内存管理</title><link>https://tonybai.com/2023/06/30/a-guide-of-using-apache-arrow-for-gopher-part2/</link><pubDate>Fri, 30 Jun 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/06/30/a-guide-of-using-apache-arrow-for-gopher-part2/</guid><description>本文永久链接 – https://tonybai.com/2023/06/30/a-guide-of-using-apache-arrow-for-gopher-part2 如果你看了上一篇《Go语言开发者的Apache Arrow使用指南：数据类型》中的诸多Go操作arrow的代码示例，你很可能会被代码中大量使用的Retain和Release方法搞晕。不光大家有这样的感觉，我也有同样的feeli...</description></item><item><title>Go语言开发者的Apache Arrow使用指南：数据类型</title><link>https://tonybai.com/2023/06/25/a-guide-of-using-apache-arrow-for-gopher-part1/</link><pubDate>Sun, 25 Jun 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/06/25/a-guide-of-using-apache-arrow-for-gopher-part1/</guid><description>本文永久链接 – https://tonybai.com/2023/06/25/a-guide-of-using-apache-arrow-for-gopher-part1 如果你不是做大数据分析的，提到Arrow这个词，你可能会以为我要聊聊那个箭牌卫浴或是箭牌口香糖(注：其实箭牌口香糖使用的单词并非Arrow)。其实我要聊的是Apache的一个顶级项目：Arrow。 为什么要聊这个项目呢？说来话...</description></item><item><title>Go语言包设计指南</title><link>https://tonybai.com/2023/06/18/go-package-design-guide/</link><pubDate>Sun, 18 Jun 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/06/18/go-package-design-guide/</guid><description>本文永久链接 – https://tonybai.com/2023/06/18/go-package-design-guide 1\. Go包的认知 ---------- 1.1 Go包是基本功能单元 我们知道Go包是Go编程语言中的一个重要概念，它是一组相关的Go源代码文件。并且，在Go中，每个Go源文件都必须属于一个包。 Go包是一个逻辑上独立的单元，是Go的**基本功能单元**，用来做功能边...</description></item><item><title>Go GC：了解便利背后的开销</title><link>https://tonybai.com/2023/06/13/understand-go-gc-overhead-behind-the-convenience/</link><pubDate>Tue, 13 Jun 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/06/13/understand-go-gc-overhead-behind-the-convenience/</guid><description>本文永久链接 – https://tonybai.com/2023/06/13/understand-go-gc-overhead-behind-the-convenience &amp;gt; 注：本文部分摘录自GopherChina 2023前的《Go高级工程师训练营》课程。 1\. 简介 ------ 当今，移动互联网和人工智能的快(越)速(来)发(越)展(卷)，对编程语言的高效性和便利性提出了更高的要求...</description></item><item><title>Go语言反射编程指南</title><link>https://tonybai.com/2023/06/04/reflection-programming-guide-in-go/</link><pubDate>Sun, 04 Jun 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/06/04/reflection-programming-guide-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/06/04/reflection-programming-guide-in-go 反射是一种编程语言的高级特性，它允许程序在运行时检视自身的结构和行为。通过反射，程序可以动态地获取类型(type)与值(value)等信息，并对它们进行操作，诸如修改字段、调用方法等，这使得程序具有更大的灵活性和可扩展性。 不过，反射虽然具有强大的功...</description></item><item><title>理解时序数据库的时间线</title><link>https://tonybai.com/2023/05/28/understand-time-series-of-tsdb/</link><pubDate>Sun, 28 May 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/05/28/understand-time-series-of-tsdb/</guid><description>本文永久链接 – https://tonybai.com/2023/05/28/understand-time-series-of-tsdb 在当今数据爆炸的时代，时序数据已经成为企业和组织中不可或缺的一部分。它们包括了从传感器、监控设备、日志记录系统和金融交易等多种来源的大量数据，这些数据按照时间顺序排列，记录了各种事件和活动的发生和变化。时序数据的分析和处理对于企业的业务决策和运营效率至关重要...</description></item><item><title>聊聊Go语言的控制语句</title><link>https://tonybai.com/2023/05/27/control-flow-statement-in-go/</link><pubDate>Sat, 27 May 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/05/27/control-flow-statement-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/05/27/control-flow-statement-in-go 在高级编程语言中，控制流语句(control-flow statement)是一类用于控制程序执行流程的语句，以下简称为**控制语句**。它们可以根据条件或循环执行相应的代码块，或者跳转到指定位置执行代码。 常见的控制语句包括： * 条件语句：根据条件执行不同的...</description></item><item><title>Go与神经网络：张量运算</title><link>https://tonybai.com/2023/05/21/go-and-nn-part1-tensor-operations/</link><pubDate>Sun, 21 May 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/05/21/go-and-nn-part1-tensor-operations/</guid><description>本文永久链接 – https://tonybai.com/2023/05/21/go-and-nn-part1-tensor-operations 0\. 背景 ------ 2023年年初，我们很可能是见证了一次新工业革命的起点，也可能是见证了AGI(Artificial general intelligence，通用人工智能)孕育的开始。ChatGPT应用以及后续GPT-4大模型的出现，其震撼...</description></item><item><title>Go错误处理：错误链使用指南</title><link>https://tonybai.com/2023/05/14/a-guide-of-using-go-error-chain/</link><pubDate>Sun, 14 May 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/05/14/a-guide-of-using-go-error-chain/</guid><description>本文永久链接 – https://tonybai.com/2023/05/14/a-guide-of-using-go-error-chain 0\. Go错误处理简要回顾 -------------- Go是一种非常强调错误处理的编程语言。在Go中，错误被表示为实现了error接口的类型的值，error接口只有一个方法： type error interface { Error() string...</description></item><item><title>Go项目组织：在单一repo中管理多个Go module指南</title><link>https://tonybai.com/2023/05/10/a-guide-of-managing-multiple-go-modules-in-mono-repo/</link><pubDate>Wed, 10 May 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/05/10/a-guide-of-managing-multiple-go-modules-in-mono-repo/</guid><description>本文永久链接 – https://tonybai.com/2023/05/10/a-guide-of-managing-multiple-go-modules-in-mono-repo 0\. 单repo单module管理回顾 -------------------- 众所周知，Go在1.11版本中引入了go module，随着近几年Go module机制的逐渐成熟，它已经被Go团队确定为**Go...</description></item><item><title>Go：值与指针</title><link>https://tonybai.com/2023/05/05/go-value-and-pointer/</link><pubDate>Fri, 05 May 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/05/05/go-value-and-pointer/</guid><description>本文永久链接 – https://tonybai.com/2023/05/05/go-value-and-pointer 1\. 计算机中的值 ---------- 在百万年的演化历史中，人类对事物的属性进行了抽象，有了数量、精度、信息等概念的表示，对应的我们称之为整数、小数、文本文字等。计算机出现后，我们使用计算机对真实世界的问题进行建模，通过计算机的高效计算解决这些问题并输出答案。为了建模，计...</description></item><item><title>Go 1.21新特性前瞻</title><link>https://tonybai.com/2023/04/26/go-1-21-foresight/</link><pubDate>Wed, 26 Apr 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/04/26/go-1-21-foresight/</guid><description>本文永久链接 – https://tonybai.com/2023/04/26/go-1-21-foresight Go 1.21版本正在如火如荼地开发当中，按照Go核心团队的一年两次的发布节奏来算，Go 1.21版本预计将在2023年8月发布(Go 1.20版本是在2023年2月份发布的)。 本文将和大家一起看看Go 1.21都会带来哪些新特性。不过由于目前为时尚早，下面列出的有些变化最终不一定...</description></item><item><title>单测时尽量用fake object</title><link>https://tonybai.com/2023/04/20/provide-fake-object-for-external-collaborators/</link><pubDate>Thu, 20 Apr 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/04/20/provide-fake-object-for-external-collaborators/</guid><description>本文永久链接 – https://tonybai.com/2023/04/20/provide-fake-object-for-external-collaborators 1\. 单元测试的难点：外部协作者(external collaborators)的存在 -------------------------------------------- 单元测试是软件开发的一个重要部分，它有助于在开...</description></item><item><title>理解unsafe-assume-no-moving-gc包</title><link>https://tonybai.com/2023/04/16/understanding-unsafe-assume-no-moving-gc/</link><pubDate>Sun, 16 Apr 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/04/16/understanding-unsafe-assume-no-moving-gc/</guid><description>本文永久链接 – https://tonybai.com/2023/04/16/understanding-unsafe-assume-no-moving-gc 1\. 背景 ------ 在之前的《Go与神经网络：张量计算》一文中，不知道大家是否发现了，所有例子代码执行时，前面都加了一个环境变量ASSUME\_NO\_MOVING\_GC\_UNSAFE\_RISK\_IT\_WITH，就像下面...</description></item><item><title>一文告诉你当module path为main时执行go test失败的真正原因</title><link>https://tonybai.com/2023/04/08/the-reason-why-go-test-fails-when-module-path-is-main/</link><pubDate>Sat, 08 Apr 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/04/08/the-reason-why-go-test-fails-when-module-path-is-main/</guid><description>本文永久链接 – https://tonybai.com/2023/04/08/the-reason-why-go-test-fails-when-module-path-is-main 近期收到新加入“Gopher部落”知识星球的星友“凌风”的一个问题，内容如下： 在一个目录下，我编写了a.go和a_test.go，在go mod init main后执行go test，会报错：could no...</description></item><item><title>一文告诉你哪些map element类型支持就地更新</title><link>https://tonybai.com/2023/04/02/map-element-types-support-in-place-update/</link><pubDate>Sun, 02 Apr 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/04/02/map-element-types-support-in-place-update/</guid><description>本文永久链接 – https://tonybai.com/2023/04/02/map-element-types-support-in-place-update 年初，我代表团队和人民邮电出版社签订了翻译《Go Fundamentals》一书的合同，本月底便是四分之一进度的交稿时间点，近期闲时我们都在忙着做交叉review。 上周末我review小伙伴翻译的有关map类型的章节时，看到了书中对m...</description></item><item><title>使用go test框架驱动的自动化测试</title><link>https://tonybai.com/2023/03/30/automated-testing-driven-by-go-test/</link><pubDate>Thu, 30 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/30/automated-testing-driven-by-go-test/</guid><description>本文永久链接 – https://tonybai.com/2023/03/30/automated-testing-driven-by-go-test 一. 背景 ----- 团队的测试人员稀缺，无奈只能“自己动手，丰衣足食”，针对我们开发的系统进行自动化测试，这样**既节省的人力，又提高了效率，还增强了对系统质量保证的信心**。 我们的目标是让自动化测试覆盖三个环境，如下图所示： 我们看到这三个...</description></item><item><title>Go开发命令行程序指南</title><link>https://tonybai.com/2023/03/25/the-guide-of-developing-cli-program-in-go/</link><pubDate>Sat, 25 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/25/the-guide-of-developing-cli-program-in-go/</guid><description>&amp;gt; 注：上面篇首配图的底图由百度文心一格生成。 本文永久链接 – https://tonybai.com/2023/03/25/the-guide-of-developing-cli-program-in-go 近期在Twitter上看到一个名为“Command Line Interface Guidelines”的站点，这个站点汇聚了帮助大家编写出更好命令行程序的哲学与指南。这份指南基于传统的U...</description></item><item><title>聊聊Go语言的全局变量</title><link>https://tonybai.com/2023/03/22/global-variable-in-go/</link><pubDate>Wed, 22 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/22/global-variable-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/03/22/global-variable-in-go &amp;gt; 注：上面篇首配图的底图由百度文心一格生成。 C语言是Go语言的先祖之一，Go继承了很多C语言的语法与表达方式，这其中就包含了**全局变量**，虽然Go在其语法规范中并没有直接给出全局变量的定义。但是已经入门Go的童鞋都知道，在Go中**包的导出变量(exported va...</description></item><item><title>聊聊godoc、go doc与pkgsite</title><link>https://tonybai.com/2023/03/20/godoc-vs-go-doc-vs-pkgsite/</link><pubDate>Mon, 20 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/20/godoc-vs-go-doc-vs-pkgsite/</guid><description>本文永久链接 – https://tonybai.com/2023/03/20/godoc-vs-go-doc-vs-pkgsite 就像上一篇文章聊到的Go内置单元测试框架一样，既重视语言特性，又不忘对Go软件项目提供整体环境特性的Go在诞生伊始就定义了如何在源码中通过注释编写代码文档的格式，并提供了基于代码注释实时生成Go文档并支持文档查看的工具。 而一些早期的语言，比如C、C++等则需要使用...</description></item><item><title>一文搞懂Go subtest</title><link>https://tonybai.com/2023/03/15/an-intro-of-go-subtest/</link><pubDate>Wed, 15 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/15/an-intro-of-go-subtest/</guid><description>&amp;gt; 注：本篇首图片基于lexica AI生成的图片二次加工而成。 本文永久链接 – https://tonybai.com/2023/03/15/an-intro-of-go-subtest 单元测试(unit testing)是软件开发中至关重要的一环，它存在的意义包括但不限于如下几个方面： * 提高代码质量：单元测试可以确保代码的正确性、可靠性和稳定性，从而减少代码缺陷和bug。 * 减少回归...</description></item><item><title>Go是一门面向对象编程语言吗</title><link>https://tonybai.com/2023/03/12/is-go-object-oriented/</link><pubDate>Sun, 12 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/12/is-go-object-oriented/</guid><description>本文永久链接 – https://tonybai.com/2023/03/12/is-go-object-oriented Go语言已经开源13年了，在近期TIOBE发布的2023年3月份的编程语言排行榜中，Go再次冲入前十，相较于Go在2022年底的排名提升了2个位次： 《Go语言第一课》专栏中关于Go在这两年开始飞起的“预言”也正在逐步成为现实^\_^，大家学习Go的热情也在快速提升， 《Go...</description></item><item><title>小厂内部私有Go module拉取方案3</title><link>https://tonybai.com/2023/03/03/the-approach-to-go-get-private-go-module-in-house-part3/</link><pubDate>Fri, 03 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/03/the-approach-to-go-get-private-go-module-in-house-part3/</guid><description>本文永久链接 – https://tonybai.com/2023/03/03/the-approach-to-go-get-private-go-module-in-house-part3 1\. 缘起 ------ 我们的Go团队这两年完全是按照之前写的《小厂内部私有Go module拉取方案》和《小厂内部私有Go module拉取方案（续）》中的方案搭建的内部拉取私有仓库的基础设施，总体感觉...</description></item><item><title>十分钟入门Go语言</title><link>https://tonybai.com/2023/02/23/learn-go-in-10-min/</link><pubDate>Thu, 23 Feb 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/02/23/learn-go-in-10-min/</guid><description>本文永久链接 – https://tonybai.com/2023/02/23/learn-go-in-10-min 本文旨在带大家快速入门Go语言，期望小伙伴们在花费十分钟左右通读全文后能对Go语言有一个初步的认知，为后续进一步深入学习Go奠定基础。 本文假设你完全没有接触过Go，你可能是一名精通其他编程语言的程序员，也可能是毫无编程经验、刚刚想转行为码农的热血青年。 编程简介 ---- 编程就...</description></item><item><title>2023年的Rust与Go[译]</title><link>https://tonybai.com/2023/02/22/rust-vs-go-in-2023/</link><pubDate>Wed, 22 Feb 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/02/22/rust-vs-go-in-2023/</guid><description>本文永久链接 – https://tonybai.com/2023/02/22/rust-vs-go-in-2023 本文译自《Rust vs Go in 2023》。 &amp;gt; 注：从2022年下半年开始，我们研发团队的产品研发不再局限于云端，车端也是将来的一个重要方向。于是我除了继续对Go语言保持常规的高度关注之外，也逐步开始留意Rust语言的发展。 * * * Rust和Go哪个更好？Go还是Ru...</description></item><item><title>一文告诉你如何判断Go接口变量是否相等</title><link>https://tonybai.com/2023/02/19/how-to-determine-if-two-interface-vars-are-equal/</link><pubDate>Sun, 19 Feb 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/02/19/how-to-determine-if-two-interface-vars-are-equal/</guid><description>本文永久链接 – https://tonybai.com/2023/02/19/how-to-determine-if-two-interface-vars-are-equal 近日一位《Go语言第一课》专栏的读者向我提出一个问题，代码如下： func main() { printNonEmptyInterface1() } type T struct { name string } func (...</description></item><item><title>Go 1.20中值得关注的几个变化</title><link>https://tonybai.com/2023/02/08/some-changes-in-go-1-20/</link><pubDate>Wed, 08 Feb 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/02/08/some-changes-in-go-1-20/</guid><description>本文永久链接 – https://tonybai.com/2023/02/08/some-changes-in-go-1-20 美国时间2023年2月1日，唯一尚未退休的Go语言之父Robert Griesemer代表Go核心开发团队在Go官博撰文正式发布了Go 1.20版本。就像Russ Cox在2022 GopherCon大会所说的那样：**Go2永不会到来，Go 1.x.y将无限延续**！ ...</description></item><item><title>将Roaring Bitmap序列化为JSON</title><link>https://tonybai.com/2023/02/01/serialize-roaring-bitmap-to-json/</link><pubDate>Wed, 01 Feb 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/02/01/serialize-roaring-bitmap-to-json/</guid><description>本文永久链接 – https://tonybai.com/2023/02/01/serialize-roaring-bitmap-to-json 近期在实现一个数据结构时使用到了位图索引(bitmap index)，本文就来粗浅聊聊位图(bitmap)。 一. 什么是bitmap 位图索引使用位数组(bit array，也有叫bitset的，通常被称为位图(bitmap)，以下均使用bitmap这...</description></item><item><title>聊聊Go与TLS 1.3</title><link>https://tonybai.com/2023/01/13/go-and-tls13/</link><pubDate>Fri, 13 Jan 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/01/13/go-and-tls13/</guid><description>本文永久链接 – https://tonybai.com/2023/01/13/go-and-tls13 除了一些综述类文章和译文，我的文章选题多来源于实际工作和学习中遇到的问题。这次我们来聊聊近期遇到一个问题：**如何加快基于TLS安全通信的海量连接的建连速度**? TLS(Transport Layer Security)传输安全层的下面是TCP层，我们首先可能会想到的是**优化内核有关TCP...</description></item><item><title>2022年博客回顾与总结</title><link>https://tonybai.com/2023/01/11/2022-blog-summary/</link><pubDate>Wed, 11 Jan 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/01/11/2022-blog-summary/</guid><description>本文永久链接 – https://tonybai.com/2023/01/11/2022-blog-summary 2022年对我来说，也是**十分忙碌和充实的一年**。尽管和2021年相比，成果物没那么多^\_^。 伴随着二宝的长大，我发现自己的闲暇时间被进一步“压缩”，还好大宝上初中后领悟到了自驱学习的重要性和相关方法后，她的学习现在基本不需要我过问了。 2022年初，《Go语言精进之路：从新...</description></item><item><title>聊聊Prometheus Gauge的增减操作实现</title><link>https://tonybai.com/2023/01/10/how-prometheus-gauge-add-and-sub/</link><pubDate>Tue, 10 Jan 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/01/10/how-prometheus-gauge-add-and-sub/</guid><description>本文永久链接 – https://tonybai.com/2023/01/10/how-prometheus-gauge-add-and-sub 1\. Gauge是啥？ 熟悉Prometheus的小伙伴们都知道Prometheus提供了四大指标类型： * Counter * Gauge * Histogram * Summary Histogram和Summary是一类，但理解起来稍复杂一些，这...</description></item><item><title>2022年Go语言盘点：泛型落地，无趣很好，稳定为王</title><link>https://tonybai.com/2022/12/29/the-2022-review-of-go-programming-language/</link><pubDate>Thu, 29 Dec 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/12/29/the-2022-review-of-go-programming-language/</guid><description>本文永久链接 – https://tonybai.com/2022/12/29/the-2022-review-of-go-programming-language 早早就计划好在年前写一个Go语言年度盘点，就像2020年和2021年那样。但恰逢国内疫情管控放开，一波阳了之后身体十分容易疲劳，再加上工作上的事情挺多，这篇盘点也就迟迟没能下笔。 今年的盘点思路将围绕三个关键字来展开：**泛型、无趣(...</description></item><item><title>Go类型系统：有何与众不同</title><link>https://tonybai.com/2022/12/18/go-type-system/</link><pubDate>Sun, 18 Dec 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/12/18/go-type-system/</guid><description>本文永久链接 – https://tonybai.com/2022/12/18/go-type-system Go是一门强类型的静态编程语言。使用Go编程，我们的每一行代码几乎都离不开**类型**。因此，深入学习Go，我们首先要对Go的类型系统(type system)有一个全面和深入的认知。Go类型系统可以给予我们一个全局整体的视角，以帮助我们更好地学习和理解Go语言中那些具体的与类型相关的内容...</description></item><item><title>Go为什么能成功</title><link>https://tonybai.com/2022/12/07/why-go-succeed/</link><pubDate>Wed, 07 Dec 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/12/07/why-go-succeed/</guid><description>本文永久链接 – https://tonybai.com/2022/12/07/why-go-succeed * * * 大家在入门Go语言时，多埋头于Go语法，忙于练手或快速完成公司的项目，无暇思考。 但当大家到了要进阶，要冲刺高级阶段的时候，我建议你不能再稀里糊涂了。既然入了Go这个坑，在进入高级阶段前，我们最好在门口的“影壁墙”前驻留一下。 仔细思考一下**我们投入这么多精力研究的Go为什么...</description></item><item><title>这可能是最权威、最全面的Go语言编码风格规范了！</title><link>https://tonybai.com/2022/11/26/intro-of-google-go-style/</link><pubDate>Sat, 26 Nov 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/11/26/intro-of-google-go-style/</guid><description>本文永久链接 – https://tonybai.com/2022/11/26/intro-of-google-go-style 每种编程语言除了固定的语法之外，都会有属于自己的**地道的(idiomatic)写法**。其实，自然语言也不例外，你想，你用心想想是不是这样。 语言的设计者们希望开发人员都能编写统一风格的地道的代码，这样不仅代码可读性好，便于社区统一代码风格，而且针对惯用法的优化也可能...</description></item><item><title>Go 1.20新特性前瞻</title><link>https://tonybai.com/2022/11/17/go-1-20-foresight/</link><pubDate>Thu, 17 Nov 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/11/17/go-1-20-foresight/</guid><description>本文永久链接 – https://tonybai.com/2022/11/17/go-1-20-foresight * * * 在近期Russ Cox代表Go核心团队发表的“Go, 13周年”一文中，他提到了“在Go的第14个年头，Go团队将继续努力使Go成为用于大规模软件工程的最好的环境，将特别关注供应链安全，提高兼容性和结构化日志记录，当然还会有很多其他改进，包括profile-guided ...</description></item><item><title>使用反射操作channel</title><link>https://tonybai.com/2022/11/15/using-reflect-to-manipulate-channels/</link><pubDate>Tue, 15 Nov 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/11/15/using-reflect-to-manipulate-channels/</guid><description>本文永久链接 – https://tonybai.com/2022/11/15/using-reflect-to-manipulate-channels * * * 今年教师节极客时间送给讲师4999 SVIP卡，一直没顾过来用，上周激活后在极客时间的众多精品课和专栏中徜徉，收获颇丰。尤其是在拜读鸟窝老师的《Go并发编程实战课》 后，get到一个以前从未用过的“技能点”：**使用reflect操作...</description></item><item><title>Go，13周年[译]</title><link>https://tonybai.com/2022/11/11/go-opensource-13-years/</link><pubDate>Fri, 11 Nov 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/11/11/go-opensource-13-years/</guid><description>本文永久链接 – https://tonybai.com/2022/11/11/go-opensource-13-years 在中华大地的老百姓抱着手机进行双十一购物节狂欢，忙着支付尾款和秒杀的时候，Go核心团队的Russ Cox代表Go语言项目团队在Go官博上发表了《Thirteen Years of Go》的博文，纪念Go语言开源13周年，并对2021年以来Go语言的演进进行了归纳总结，对Go...</description></item><item><title>通过实例理解Go标准库context包</title><link>https://tonybai.com/2022/11/08/understand-go-context-by-example/</link><pubDate>Tue, 08 Nov 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/11/08/understand-go-context-by-example/</guid><description>* **原weibo账号处于jy状态，临时先用小号 https://weibo.com/u/6484441286，欢迎大家关注！** * “Gopher部落”知识星球双十一新人特惠，领劵加入即享立减88元优惠 – https://t.zsxq.com/078E1QTjM 本文永久链接 – https://tonybai.com/2022/11/08/understand-go-context-by...</description></item><item><title>slog：Go官方版结构化日志包</title><link>https://tonybai.com/2022/10/30/first-exploration-of-slog/</link><pubDate>Sun, 30 Oct 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/10/30/first-exploration-of-slog/</guid><description>本文永久链接 – https://tonybai.com/2022/10/30/first-exploration-of-slog * * * Go自诞生以来就在其标准库内置了log包作为Go源码输出日志的标准组件，该包被广泛应用于Go标准库自身以及Go社区项目中。 不过，针对Go标准库log包，Go社区要求改进的声音始终不断，主流声音聚焦在以下几点： * log包是为了方便人类可读而设计的，不支...</description></item><item><title>当函数设计遇到切片</title><link>https://tonybai.com/2022/10/27/when-encountering-slice-during-function-design/</link><pubDate>Thu, 27 Oct 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/10/27/when-encountering-slice-during-function-design/</guid><description>本文永久链接 – https://tonybai.com/2022/10/27/when-encountering-slice-during-function-design 切片(slice)是Go语言中的一种重要的也是最常用的同构数据类型。在Go语言编码过程中，我们多数情况下会使用slice替代数组，一来是因为其动态可扩展，二来在多数场合传递slice的开销要比传递数组要小(这里有一些例外)。 ...</description></item><item><title>Go标准库依赖的那些modules</title><link>https://tonybai.com/2022/10/25/the-modules-that-go-standard-library-depend-on/</link><pubDate>Tue, 25 Oct 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/10/25/the-modules-that-go-standard-library-depend-on/</guid><description>本文永久链接 – https://tonybai.com/2022/10/25/the-modules-that-go-standard-library-depend-on 对于程序员来说，编写的代码依赖标准库是“天经地义”的事情。标准库在程序员眼中就是高质量的代名词，也是最值得信赖的非自己所写的代码，当然更是代码包依赖关系链条上的最后一环，即所有直接或间接依赖的第三方module最终都会依赖标准...</description></item><item><title>通过实例理解Go静态单赋值（SSA）</title><link>https://tonybai.com/2022/10/21/understand-go-ssa-by-example/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/10/21/understand-go-ssa-by-example/</guid><description>本文永久链接 – https://tonybai.com/2022/10/21/understand-go-ssa-by-example 在上一篇文章《通过实例理解Go内联优化》中，我们探讨了Go编译器在编译中端进行的内联优化。内联优化基于IR中间表示进行，不过Go编译过程不止有一种IR表示，这点和龙书《编译原理(第二版)》的在第六章“中间代码生成”一开始处的讲解是一致的，即在将给定源语言的一个程...</description></item><item><title>通过实例理解Go内联优化</title><link>https://tonybai.com/2022/10/17/understand-go-inlining-optimisations-by-example/</link><pubDate>Mon, 17 Oct 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/10/17/understand-go-inlining-optimisations-by-example/</guid><description>本文永久链接 – https://tonybai.com/2022/10/17/understand-go-inlining-optimisations-by-example * * * 移动互联网时代，直面C端用户的业务系统规模一般都很庞大，系统消耗的机器资源也很可观，系统使用的CPU核数、内存都是在消耗公司的真金白银。在服务水平不下降的前提下尽量降低单服务实例的资源消耗，即我们俗称的“少吃草多...</description></item><item><title>Go语言之道[译]</title><link>https://tonybai.com/2022/09/25/the-tao-of-go/</link><pubDate>Sun, 25 Sep 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/09/25/the-tao-of-go/</guid><description>本文永久链接 – https://tonybai.com/2022/09/25/the-tao-of-go 近期阅读了John Arundel的文章《The Tao of Go》，看完后我都有心去阅读一遍《道德经》了:)。作者将Go语言设计哲学与惯例与“道”学三宝有机的联系到一起，给了我不小的启发。这里译成中文，供大家参考。 * * * &amp;gt; 你可以让水牛去任何地方，只要它们想去 – 杰拉尔德・温伯...</description></item><item><title>使用viper实现yaml配置文件的合并</title><link>https://tonybai.com/2022/09/20/use-viper-to-do-merge-of-yml-configuration-files/</link><pubDate>Tue, 20 Sep 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/09/20/use-viper-to-do-merge-of-yml-configuration-files/</guid><description>本文永久链接 – https://tonybai.com/2022/09/20/use-viper-to-do-merge-of-yml-configuration-files 作为小厂，我们的基础设施还不够完备，项目经理中秋节通知我们的系统近期要上second-to-last stage环境和生产环境，于是从运维人员部署效率方面考量，我们紧急开发了一个一键安装脚本生成工具，这样运维人员便可以利用...</description></item><item><title>如何像gitlab-runner那样将Go应用安装为系统服务</title><link>https://tonybai.com/2022/09/12/how-to-install-a-go-app-as-a-system-service-like-gitlab-runner/</link><pubDate>Mon, 12 Sep 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/09/12/how-to-install-a-go-app-as-a-system-service-like-gitlab-runner/</guid><description>本文永久链接 – https://tonybai.com/2022/09/12/how-to-install-a-go-app-as-a-system-service-like-gitlab-runner 在《让reviewdog支持gitlab-push-commit，守住代码质量下限》一文中，gitlab-runner(一个Go语言开发的应用)通过自身提供的install命令将自己安装为了一个...</description></item><item><title>有没有安全漏洞，你说了不算，govulncheck是裁判！</title><link>https://tonybai.com/2022/09/10/an-intro-of-govulncheck/</link><pubDate>Sat, 10 Sep 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/09/10/an-intro-of-govulncheck/</guid><description>本文永久链接 – https://tonybai.com/2022/09/10/an-intro-of-govulncheck * * * 2022年9月7日，Go安全团队在Go官博发表文章《Vulnerability Management for Go》，正式向所有Gopher介绍Go对安全漏洞管理的工具和方案。 在这篇文章中，Go安全团队引入了一个名为govulncheck的命令行工具。这个工...</description></item><item><title>让reviewdog支持gitlab-push-commit，守住代码质量下限</title><link>https://tonybai.com/2022/09/08/make-reviewdog-support-gitlab-push-commit-to-preserve-the-code-quality-floor/</link><pubDate>Thu, 08 Sep 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/09/08/make-reviewdog-support-gitlab-push-commit-to-preserve-the-code-quality-floor/</guid><description>本文永久链接 – https://tonybai.com/2022/09/08/make-reviewdog-support-gitlab-push-commit-to-preserve-the-code-quality-floor 一. 代码质量保证的手段 从世界上首款计算机高级程序设计语言Fortran自上世纪50年代诞生以来，编程这个行当已经走过了近70年。虽然年头已不少，但不可否认的一点是...</description></item><item><title>Go 1.19中值得关注的几个变化</title><link>https://tonybai.com/2022/08/22/some-changes-in-go-1-19/</link><pubDate>Mon, 22 Aug 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/08/22/some-changes-in-go-1-19/</guid><description>本文永久链接 – https://tonybai.com/2022/08/22/some-changes-in-go-1-19 我们知道Go团队在2015年重新规定了团队发布版本的节奏，将Go大版本的发布频率确定为每年两次，发布窗口定为每年的2月与8月。而实现自举的Go 1.5版本是这一个节奏下发布的第一个版本。一般来说，Go团队都会在这两个窗口的中间位置发布版本，不过这几年也有意外，比如承载着泛...</description></item><item><title>使用Go开发Kubernetes Operator：基本结构</title><link>https://tonybai.com/2022/08/15/developing-kubernetes-operators-in-go-part1/</link><pubDate>Mon, 15 Aug 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/08/15/developing-kubernetes-operators-in-go-part1/</guid><description>本文永久链接 – https://tonybai.com/2022/08/15/developing-kubernetes-operators-in-go-part1 &amp;gt; 注：文章首图基于《Kubernetes Operators Explained》修改 几年前，我还称Kubernetes为服务编排和容器调度领域的事实标准，如今K8s已经是这个领域的“霸主”，地位无可撼动。不过，虽然Kubern...</description></item><item><title>基于多label的issue驱动软件开发的实践</title><link>https://tonybai.com/2022/08/12/practices-of-multi-label-based-issue-driven-software-development/</link><pubDate>Fri, 12 Aug 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/08/12/practices-of-multi-label-based-issue-driven-software-development/</guid><description>本文永久链接 – https://tonybai.com/2022/08/12/practices-of-multi-label-based-issue-driven-software-development 软件吞噬世界，开源吞噬软件！基于工单跟踪系统(issue tracking system)的**issue driven开发**的模式不仅对开源系统的开发过程有着重要影响，在商业软件开发领域...</description></item><item><title>使用Go语言实现eBPF程序内核态与用户态的双向数据交换</title><link>https://tonybai.com/2022/07/25/bidirectional-data-exchange-between-kernel-and-user-states-of-ebpf-programs-using-go/</link><pubDate>Mon, 25 Jul 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/07/25/bidirectional-data-exchange-between-kernel-and-user-states-of-ebpf-programs-using-go/</guid><description>本文永久链接 – https://tonybai.com/2022/07/25/bidirectional-data-exchange-between-kernel-and-user-states-of-ebpf-programs-using-go 在之前的两篇文章中，无论是使用C语言开发eBPF程序，还是使用Go开发的eBPF程序，都是hello world级别的，可能有用，但谈不上十分实用。 ...</description></item><item><title>使用Go语言开发eBPF程序</title><link>https://tonybai.com/2022/07/19/develop-ebpf-program-in-go/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/07/19/develop-ebpf-program-in-go/</guid><description>本文永久链接 – https://tonybai.com/2022/07/19/develop-ebpf-program-in-go 在前面的《使用C语言从头开发一个Hello World级别的eBPF程序》一文中，我们详细说明了如何基于C语言和libbpf库从头开发一个eBPF程序(包括其用户态部分)。那篇文章是后续有关eBPF程序开发文章的基础，因为到目前为止，无论eBPF程序的用户态部分用什...</description></item><item><title>使用Go基于国密算法实现双向认证</title><link>https://tonybai.com/2022/07/17/two-way-authentication-using-go-and-sm-algorithm/</link><pubDate>Sun, 17 Jul 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/07/17/two-way-authentication-using-go-and-sm-algorithm/</guid><description>本文永久链接 – https://tonybai.com/2022/07/17/two-way-authentication-using-go-and-sm-algorithm 国内做2B(to Biz)或2G(to Gov)产品和解决方案的企业都绕不过**国密算法**，越来越多的国内甲方在采购需求中包含了基于国密算法的认证、签名、加密等需求。对于国内的车联网平台来说，支持基于国密的双向认证也是大...</description></item><item><title>GoCN社区Go读书会第二期：《Go语言精进之路》</title><link>https://tonybai.com/2022/07/07/gocn-community-go-book-club-issue2-go-programming-from-beginner-to-master/</link><pubDate>Thu, 07 Jul 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/07/07/gocn-community-go-book-club-issue2-go-programming-from-beginner-to-master/</guid><description>本文永久链接 – https://tonybai.com/2022/07/07/gocn-community-go-book-club-issue2-go-programming-from-beginner-to-master 本文是2022年6月26日我在**GoCN社区的Go读书会第二期《Go语言精进之路》直播的文字稿**。本文对直播的内容做了重新整理与修订，供喜欢阅读文字的朋友们在收看直播后...</description></item><item><title>使用C语言从头开发一个Hello World级别的eBPF程序</title><link>https://tonybai.com/2022/07/05/develop-hello-world-ebpf-program-in-c-from-scratch/</link><pubDate>Tue, 05 Jul 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/07/05/develop-hello-world-ebpf-program-in-c-from-scratch/</guid><description>本文永久链接 – https://tonybai.com/2022/07/05/develop-hello-world-ebpf-program-in-c-from-scratch * * * 近两年最火的Linux内核技术非eBPF莫属！ 2019年以来，除了eBPF技术自身快速演进之外，基于eBPF技术的观测(Observability)、安全(Security)和网络(Networking)...</description></item><item><title>Go语言数据竞争检测与数据竞争模式</title><link>https://tonybai.com/2022/06/21/data-race-detection-and-pattern-in-go/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/06/21/data-race-detection-and-pattern-in-go/</guid><description>本文永久链接 – https://tonybai.com/2022/06/21/data-race-detection-and-pattern-in-go uber，就是那个早早退出中国打车市场的优步，是Go语言早期接纳者，也是Go技术栈的“重度用户”。uber内部的Go代码仓库有5000w+行Go代码，有2100个Go实现的独立服务，这样的Go应用规模在世界范围内估计也是Top3了吧。 uber...</description></item><item><title>小厂内部私有Go module拉取方案（续）</title><link>https://tonybai.com/2022/06/18/the-approach-to-go-get-private-go-module-in-house-part2/</link><pubDate>Sat, 18 Jun 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/06/18/the-approach-to-go-get-private-go-module-in-house-part2/</guid><description>本文永久链接 – https://tonybai.com/2022/06/18/the-approach-to-go-get-private-go-module-in-house-part2 自从去年在公司搭建了内部私有Go module proxy后，我们的私有代理工作得基本良好。按理说，这篇续篇本不该存在:)。 日子一天天过去，Go团队逐渐壮大，空气中都充满了“Go的香气”。 突然有一天，业务...</description></item><item><title>Prometheus采不到数据了！居然是Prometheus client包的锅</title><link>https://tonybai.com/2022/06/15/prometheus-can-not-pick-up-data-because-of-the-prometheus-client-package/</link><pubDate>Wed, 15 Jun 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/06/15/prometheus-can-not-pick-up-data-because-of-the-prometheus-client-package/</guid><description>本文永久链接 – https://tonybai.com/2022/06/15/prometheus-can-not-pick-up-data-because-of-the-prometheus-client-package 在基于eBPF的新一代观测设施尚未成熟之前，我们采用了业界成熟的Prometheus+Grafana方案采集节点与应用度量指标(metrics)信息。众所周知，这样的方案是一...</description></item><item><title>Go 1.19新特性前瞻</title><link>https://tonybai.com/2022/06/12/go-1-19-foresight/</link><pubDate>Sun, 12 Jun 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/06/12/go-1-19-foresight/</guid><description>本文永久链接 – https://tonybai.com/2022/06/12/go-1-19-foresight 美国时间2022年5月7日，Go 1.19版本开发分支进入新特性冻结(freeze)阶段，即只能修Bug，不能再向Go 1.19版本中增加新特性了。由于上一个版本Go 1.18因引入泛型改动较大，推迟了一个月发布，这直接导致了Go 1.19版本的开发周期被缩短。 虽然开发周期少了近一...</description></item><item><title>Go：方法集合中“消失的方法”</title><link>https://tonybai.com/2022/06/06/the-disappeared-method-in-method-set/</link><pubDate>Mon, 06 Jun 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/06/06/the-disappeared-method-in-method-set/</guid><description>本文永久链接 – https://tonybai.com/2022/06/06/the-disappeared-method-in-method-set 在《Go语言第一课》中，我花了三节课对Go方法做了全面细致的讲解，而类型的方法集合是其中的一个重点，因为**方法集合决定接口实现**，并且课程还分门别类地对各种使用类型嵌入(type embedding)机制定义的类型进行了说明，讲解了这些类型的...</description></item><item><title>评点2021-2022年上市的那些Go语言新书</title><link>https://tonybai.com/2022/06/01/reviewing-those-new-go-language-books-coming-out-in-2021-2022/</link><pubDate>Wed, 01 Jun 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/06/01/reviewing-those-new-go-language-books-coming-out-in-2021-2022/</guid><description>本文永久链接 – https://tonybai.com/2022/06/01/reviewing-those-new-go-language-books-coming-out-in-2021-2022 计算机科学与技术这个工业大类与传统工业类别相比还很“年轻”，并且由于历史原因，整个计算机科学与技术学科的奠基都是由欧美人完成的，因此但凡诞生一门新IT技术或新编程语言，我们首先参考的都是来自欧美的...</description></item><item><title>手把手教你使用ANTLR和Go实现一门DSL语言（第五部分）：错误处理</title><link>https://tonybai.com/2022/05/30/an-example-of-implement-dsl-using-antlr-and-go-part5/</link><pubDate>Mon, 30 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/30/an-example-of-implement-dsl-using-antlr-and-go-part5/</guid><description>本文永久链接 – https://tonybai.com/2022/05/30/an-example-of-implement-dsl-using-antlr-and-go-part5 无论是端应用还是云应用，要上生产环境，有一件事必须要做好，那就是**错误处理**。在本系列前面的文章中，我们设计了文法与语法、建立并验证了语义模型，但我们没有特别关注错误处理。在这一篇中，我们就来补上这个环节。 D...</description></item><item><title>手把手教你使用ANTLR和Go实现一门DSL语言（第四部分）：组装语义模型并测试DSL</title><link>https://tonybai.com/2022/05/28/an-example-of-implement-dsl-using-antlr-and-go-part4/</link><pubDate>Sat, 28 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/28/an-example-of-implement-dsl-using-antlr-and-go-part4/</guid><description>本文永久链接 – https://tonybai.com/2022/05/28/an-example-of-implement-dsl-using-antlr-and-go-part4 在上一篇文章中，我们为DSL建立了完整的语义模型，我们距离DSL的语法示例真正run起来还差最后一步，那就是基于语法树提取信息(逆波兰式)、组装语义模型，在加载语义模型并实例化各个规则处理器(processor)后...</description></item><item><title>手把手教你使用ANTLR和Go实现一门DSL语言（第三部分）：建立和验证语义模型</title><link>https://tonybai.com/2022/05/27/an-example-of-implement-dsl-using-antlr-and-go-part3/</link><pubDate>Fri, 27 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/27/an-example-of-implement-dsl-using-antlr-and-go-part3/</guid><description>本文永久链接 – https://tonybai.com/2022/05/27/an-example-of-implement-dsl-using-antlr-and-go-part3 在前面的系列文章中，我们为气象学家们设计了一门名为**Tdat**的DSL，使用ANTLR的文法规则编写了Tdat的文法，基于该文法生成了Tdat的语法解析器代码并初步验证了文法的正确性，Tdat可以成功将我们编写...</description></item><item><title>手把手教你使用ANTLR和Go实现一门DSL语言（第二部分）：文法验证</title><link>https://tonybai.com/2022/05/25/an-example-of-implement-dsl-using-antlr-and-go-part2/</link><pubDate>Wed, 25 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/25/an-example-of-implement-dsl-using-antlr-and-go-part2/</guid><description>本文永久链接 – https://tonybai.com/2022/05/25/an-example-of-implement-dsl-using-antlr-and-go-part2 在本系列的第一篇文章《手把手教你使用ANTLR和Go实现一门DSL语言：设计DSL语法与文法》中，我们已经为气象学家们设计了一门DSL，建立了语法样例，并用ANTLR4文法将DSL定义了出来。按照外部DSL设计与实...</description></item><item><title>手把手教你使用ANTLR和Go实现一门DSL语言（第一部分）：设计DSL语法与文法</title><link>https://tonybai.com/2022/05/24/an-example-of-implement-dsl-using-antlr-and-go-part1/</link><pubDate>Tue, 24 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/24/an-example-of-implement-dsl-using-antlr-and-go-part1/</guid><description>本文永久链接 – https://tonybai.com/2022/05/24/an-example-of-implement-dsl-using-antlr-and-go-part1 在《使用ANTLR和Go实现DSL入门》一文中，我们了解了DSL与通用编程语言(GPL)的差异、DSL解析器生成工具选择以及ANTLR文法的简要书写规则，并和大家一起完成了一个CSV解析器的例子。看完上述文章后，你...</description></item><item><title>使用具名返回值巧妙解决泛型函数返回零值的问题</title><link>https://tonybai.com/2022/05/20/solving-problems-in-generic-function-implementation-using-named-return-values/</link><pubDate>Fri, 20 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/20/solving-problems-in-generic-function-implementation-using-named-return-values/</guid><description>本文永久链接 – https://tonybai.com/2022/05/20/solving-problems-in-generic-function-implementation-using-named-return-values Go语言泛型语法特性在Go 1.18版本落地后，不出所料，在github上看到大量的基础容器类型数据结构被用泛型重写。这种重写我觉得是很正常、很自然的，并且实现良好...</description></item><item><title>绞尽脑汁，帮你理解方法本质并选择正确的receiver类型</title><link>https://tonybai.com/2022/05/17/understand-the-nature-of-go-method-and-how-to-choose-the-correct-receiver-type/</link><pubDate>Tue, 17 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/17/understand-the-nature-of-go-method-and-how-to-choose-the-correct-receiver-type/</guid><description>本文永久链接 – https://tonybai.com/2022/05/17/understand-the-nature-of-go-method-and-how-to-choose-the-correct-receiver-type Go语言虽然不支持经典的面向对象语法元素，比如：类、对象、继承等，但Go语言也有方法（method）。和函数相比，Go语言中的方法在声明形式上仅仅多了一个参数，G...</description></item><item><title>Go程序员拥抱C语言简明指南</title><link>https://tonybai.com/2022/05/16/the-short-guide-of-embracing-c-lang-for-gopher/</link><pubDate>Mon, 16 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/16/the-short-guide-of-embracing-c-lang-for-gopher/</guid><description>本文永久链接 – https://tonybai.com/2022/05/16/the-short-guide-of-embracing-c-lang-for-gopher 本文是为于航老师的极客时间专栏《深入C语言和程序运行原理》写的加餐文章《Tony Bai：Go程序员拥抱C语言简明指南》，这里分享给大家，尤其是那些想学习C语言的Gopher们。 * * * 你好，我是Tony Bai。 也许...</description></item><item><title>使用ANTLR和Go实现DSL入门</title><link>https://tonybai.com/2022/05/10/introduction-of-implement-dsl-using-antlr-and-go/</link><pubDate>Tue, 10 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/10/introduction-of-implement-dsl-using-antlr-and-go/</guid><description>本文永久链接 – https://tonybai.com/2022/05/10/introduction-of-implement-dsl-using-antlr-and-go 一. 引子 设计与实现一门像Go这样的通用编程语言的确很难！那是世界上少数程序员从事的事业，但是实现一门领域特定语言(Domain Specific Language, DSL)似乎是可行的。 就像著名的语言解析器生成工具...</description></item><item><title>Go编程语言与环境：万字长文复盘导致Go语言成功的那些设计决策[译]</title><link>https://tonybai.com/2022/05/04/the-paper-of-go-programming-language-and-environment/</link><pubDate>Wed, 04 May 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/05/04/the-paper-of-go-programming-language-and-environment/</guid><description>本文永久链接 – https://tonybai.com/2022/05/04/the-paper-of-go-programming-language-and-environment 美国计算机学会通讯(Communications of the ACM)期刊2022年5月第65卷第5期将发表一篇有关Go语言的综述类Paper：《Go编程语言与环境》，这类综述类文章只有资深的Go核心团队的人才“...</description></item><item><title>我来告诉你Go项目标准结构如何布局</title><link>https://tonybai.com/2022/04/28/the-standard-layout-of-go-project/</link><pubDate>Thu, 28 Apr 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/04/28/the-standard-layout-of-go-project/</guid><description>本文永久链接 – https://tonybai.com/2022/04/28/the-standard-layout-of-go-project 每当我们编写一个非hello world的实用Go程序或库时，我们都会在项目结构、代码风格以及标识符命名这三个“门槛”前面踯躅徘徊许久，甚至始终得不到满意答案。 本文将通过《Go语言精进之路：从新手到高手的编程思想、方法与技巧》这本书的内容来详细看一看...</description></item><item><title>世界读书日：带你走近Go语言编程思维</title><link>https://tonybai.com/2022/04/23/taking-a-closer-look-at-programming-thinking-in-go/</link><pubDate>Sat, 23 Apr 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/04/23/taking-a-closer-look-at-programming-thinking-in-go/</guid><description>本文永久链接 – https://tonybai.com/2022/04/23/taking-a-closer-look-at-programming-thinking-in-go 经过十几年的演化和发展，Go语言在全世界范围内已经拥有了百万级别的拥趸，在这些开发者当中，除了一部分新入行的编程语言初学者之外，更多的是从其他编程语言阵营转过来的开发者。由于Go语言上手容易，在转Go的初期大家很快就掌...</description></item><item><title>Go 1.18中值得关注的几个变化</title><link>https://tonybai.com/2022/04/20/some-changes-in-go-1-18/</link><pubDate>Wed, 20 Apr 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/04/20/some-changes-in-go-1-18/</guid><description>本文永久链接 – https://tonybai.com/2022/04/20/some-changes-in-go-1-18 &amp;gt; 从3月23日开始，我居家办公了20+天。这期间我本来是应该有时间写下这篇综述类文章的，但是封了两天后，抢菜、带娃的事情就开始困扰着我。我实在没有下笔写下这篇文章的心思。4月13日终于解封了，上班后的气象就是不一样，人也精神了很多，于是这篇文章也被提上了日程。希望新冠疫...</description></item><item><title>Go字符串比较，终于有人讲清楚了</title><link>https://tonybai.com/2022/04/18/inside-go-string-comparison/</link><pubDate>Mon, 18 Apr 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/04/18/inside-go-string-comparison/</guid><description>本文永久链接 – https://tonybai.com/2022/04/18/inside-go-string-comparison 西娅(Thea)是一个刚刚入门Go语言的妹子程序员，今天她遇到了一个让她“surprise”的问题。下面就是那段让妹子西娅困惑的Go代码： func main() { s1 := &amp;#34;12345&amp;#34; s2 := &amp;#34;2&amp;#34; fmt.Println(`&amp;#34;12345&amp;#34; &amp;gt; &amp;#34;...</description></item><item><title>Go是如何缓解供应链攻击的[译]</title><link>https://tonybai.com/2022/04/02/how-go-mitigates-supply-chain-attacks/</link><pubDate>Sat, 02 Apr 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/04/02/how-go-mitigates-supply-chain-attacks/</guid><description>本文永久链接 – https://tonybai.com/2022/04/02/how-go-mitigates-supply-chain-attacks 这些年来，关于软件供应链的安全问题频发，软件供应链已然成为IT安全领域的一个热点，在前不久的《聊聊Go语言的软件供应链安全》一文中我曾提到过Go在SBOM(软件物料清单)方面给开发人员带来的方便。这两天Go官博又发表了一篇由Go项目安全负责人F...</description></item><item><title>Go社区主流Kafka客户端简要对比</title><link>https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients/</link><pubDate>Mon, 28 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients/</guid><description>本文永久链接 – https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients 一. 背景 众所周知，Kafka是Apache开源基金会下的明星级开源项目，作为一个开源的分布式事件流平台，它被成千上万的公司用于高性能数据管道、流分析、数据集成和关键任务应用。在国内，无论大厂小厂，无论是...</description></item><item><title>Go泛型介绍[译]</title><link>https://tonybai.com/2022/03/25/intro-generics/</link><pubDate>Fri, 25 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/25/intro-generics/</guid><description>本文永久链接 – https://tonybai.com/2022/03/25/intro-generics Go核心团队在官博上发布了一篇名为《An Introduction To Generics》的文章，该文章基于Robert Griesemer和Ian Lance Taylor在2021年GopherCon大会上的演讲，这是Go团队发布Go 1.18版本后官博发表的首篇有关Go泛型的文章，...</description></item><item><title>len(s)表达式的求值结果究竟是常量还是变量？我来告诉你</title><link>https://tonybai.com/2022/03/24/the-result-of-a-len-expression-is-constant-or-variable/</link><pubDate>Thu, 24 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/24/the-result-of-a-len-expression-is-constant-or-variable/</guid><description>本文永久链接 – https://tonybai.com/2022/03/24/the-result-of-a-len-expression-is-constant-or-variable **len**是Go预定义标识符，同时也是Go内置的预定义函数，通过go doc工具我们能查到len函数的doc如下： ``` $go doc builtin.len package builtin // im...</description></item><item><title>Go是否支持增量构建？我来告诉你！</title><link>https://tonybai.com/2022/03/21/go-native-support-incremental-build/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/21/go-native-support-incremental-build/</guid><description>本文永久链接 – https://tonybai.com/2022/03/21/go-native-support-incremental-build Go语言**以编译速度快闻名于码农界**。这缘于Go在设计之初就选择抛弃其祖辈C语言的头文件包含机制，选择了以包(package)作为基本编译单元。Go语言的这种以包为基本构建单元的构建模型使得依赖分析变得十分简单，避免了C语言那种通过头文件分析依...</description></item><item><title>针对大型数组的迭代，for range真的比经典for loop慢吗？</title><link>https://tonybai.com/2022/03/19/for-range-vs-classic-for-loop-when-iterating-large-array/</link><pubDate>Sat, 19 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/19/for-range-vs-classic-for-loop-when-iterating-large-array/</guid><description>本文永久链接 – https://tonybai.com/2022/03/19/for-range-vs-classic-for-loop-when-iterating-large-array Go语言推崇“**一件事情仅有一个作法**”！比如：Go仅保留一类循环控制语句，那就是**经典版的for loop**： ``` for i := 0; i &amp;lt; 100; i++ { ... ... } `...</description></item><item><title>Go 1.18版本正式发布了</title><link>https://tonybai.com/2022/03/16/go-1-18-released/</link><pubDate>Wed, 16 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/16/go-1-18-released/</guid><description>本文永久链接 – https://tonybai.com/2022/03/16/go-1-18-released 美国时间2022年3月15日，Go核心团队官宣了Go 1.18版本正式版的发布！这是一个万众期待的版本，因为在这个版本中，Go核心团队做了Go语言开源以来的最大一次语法特性变更 – 增加了对泛型(generics)的支持！下面是对Go官博文章的全文翻译，供大家参考！ * * * 今天，...</description></item><item><title>Go语言map类型变量背后的那些事儿</title><link>https://tonybai.com/2022/03/15/the-underlying-of-a-map-type-variable/</link><pubDate>Tue, 15 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/15/the-underlying-of-a-map-type-variable/</guid><description>本文永久链接 – https://tonybai.com/2022/03/15/the-underlying-of-a-map-type-variable 切片(slice)和map是Go语言中最常用的两种原生复合数据类型，同时也是最容易使初学者感觉迷惑和“掉坑”的两个类型，这很大程度是因为Go runtime层的存在。什么是Go runtime层？可以参考我在《Go语言第一课FAQ》中的解释。 ...</description></item><item><title>聊聊Go语言的软件供应链安全</title><link>https://tonybai.com/2022/03/14/software-supply-chain-security-in-go/</link><pubDate>Mon, 14 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/14/software-supply-chain-security-in-go/</guid><description>本文永久链接 – https://tonybai.com/2022/03/14/software-supply-chain-security-in-go 在Go 12岁生日以及Go 1.18 beta1发布的博文中，Go核心团队技术负责人Russ Cox都提到了2022年Go团队将关注Go软件供应链安全，并在Go中为软件供应链提供相关工具。 提到供应链，我们立马想到的它是制造业的存在，在软件开发领...</description></item><item><title>为什么有了Go module后“依赖地狱”问题依然存在</title><link>https://tonybai.com/2022/03/12/dependency-hell-in-go/</link><pubDate>Sat, 12 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/12/dependency-hell-in-go/</guid><description>本文永久链接 – https://tonybai.com/2022/03/12/dependency-hell-in-go 如果所有Gopher都抛弃GOPATH构建模式，拥抱Go module构建模式；如果所有legacy Go package作者都能为自己的legacy package加上go.mod；如果所有Go module作者都严格遵守语义版本(semver)规范，那么Go将彻底解决“依...</description></item><item><title>Gopher部落：2022年要做的事儿</title><link>https://tonybai.com/2022/03/06/the-2022-plan-of-gopher-tribe/</link><pubDate>Sun, 06 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/06/the-2022-plan-of-gopher-tribe/</guid><description>本文永久链接 – https://tonybai.com/2022/03/06/the-2022-plan-of-gopher-tribe 2021年末，我对Gopher部落知识星球的这一年进行了简单的复盘。2022年初，我陆续收到知识星球官方的一些排名数据： 这些数据让我对2022年星球的运营更加有信心了！那么，2022年Gopher部落知识星球会有哪些变化呢？在本文中，我就来说一说这方面内容。...</description></item><item><title>聊聊Go应用输出日志的工程实践</title><link>https://tonybai.com/2022/03/05/go-logging-practice/</link><pubDate>Sat, 05 Mar 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/03/05/go-logging-practice/</guid><description>&amp;gt; 配图改自网络 本文永久链接 – https://tonybai.com/2022/03/05/go-logging-practice Go隶属于后端语言，以开发各类服务、中间件和系统平台见长。日常学习Go语言时，日志不是不可或缺的，甚至是无需考虑的，但是一旦到真正的Go的工程实践中，输出日志便是我们绕不过去的、必须面对的问题。 Go开发的服务大多具有连续和自主运行的属性，通常都是7×24小时运...</description></item><item><title>为什么这个T类型实例无法调用*T类型的方法</title><link>https://tonybai.com/2022/02/27/go-addressable/</link><pubDate>Sun, 27 Feb 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/02/27/go-addressable/</guid><description>本文永久链接 – https://tonybai.com/2022/02/27/go-addressable 近期在“Go语言第一课”专栏后台看到一位学员的一则留言，如下图： 由于有课程上下文，所以我这里将问题的上下文重新描述一下。 在专栏的第25讲，我们学习了Go语言提供的一个“语法糖”，比如下面这个例子： ``` type T struct { a int } func (t T) M1() ...</description></item><item><title>Go GC如何检测内存对象中是否包含指针</title><link>https://tonybai.com/2022/02/21/how-gc-detect-pointer-in-mem-obj/</link><pubDate>Mon, 21 Feb 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/02/21/how-gc-detect-pointer-in-mem-obj/</guid><description>本文永久链接 – https://tonybai.com/2022/02/21/how-gc-detect-pointer-in-mem-obj 众所周知，Go是带垃圾回收(GC)的编程语言，开发者通常不需要考虑对内存的管理，降低了心智负担。Go程序运行的时候，GC在背后默默辛劳地为开发者**“擦屁股”**：把无法reach到的内存对象定期地释放掉以备后续重用。 GC只关心**指针**，只要被扫描...</description></item><item><title>“Go语言第一课”结课了</title><link>https://tonybai.com/2022/02/17/go-first-course-close/</link><pubDate>Thu, 17 Feb 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/02/17/go-first-course-close/</guid><description>本文永久链接 – https://tonybai.com/2022/02/17/go-first-course-close 就在家家户户刚刚过完虎年元宵佳节之际，我的Go语言专栏：《Tony Bai·Go语言第一课》也迎来了它的最后一讲**结术语**。 这门专栏的撰写开始于2021年5月中旬，翻看我用于管理专栏原始文稿的github仓库的commit log记录，这一有纪念价值的日子被精确定位在5...</description></item><item><title>Go究竟是否为空切片分配了底层数组</title><link>https://tonybai.com/2022/02/15/whether-go-allocate-underlying-array-for-empty-slice/</link><pubDate>Tue, 15 Feb 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/02/15/whether-go-allocate-underlying-array-for-empty-slice/</guid><description>本文永久链接 – https://tonybai.com/2022/02/15/whether-go-allocate-underlying-array-for-empty-slice 这周在“Go语言第一课”的留言区看到一位同学的这样一个问题： 切片是Go语言中的一个重要的语法元素，也是日常Go开发中使用最为频繁的语法元素。有过Go语言开发经验的童鞋估计大多都知道空切片(empty slice)...</description></item><item><title>2021年Go语言盘点：厉兵秣马强技能，蓄势待发新征程</title><link>https://tonybai.com/2022/01/16/the-2021-review-of-go-programming-language/</link><pubDate>Sun, 16 Jan 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/01/16/the-2021-review-of-go-programming-language/</guid><description>本文永久链接 – https://tonybai.com/2022/01/16/the-2021-review-of-go-programming-language 由于日常忙工作，闲时忙专栏，我早已策划的**2021年Go语言盘点**这篇文章一直拖到了2022年元旦之后才开始落笔。 2021年，Go迈过了其开源的第12个年头。虽然已经演进了10余年，但在编程语言这个领域中，Go依旧属于“小字辈”...</description></item><item><title>Go语言精进之路：为Gopher们准备的“知识年货”</title><link>https://tonybai.com/2022/01/15/go-programming-from-beginners-to-masters-is-published/</link><pubDate>Sat, 15 Jan 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/01/15/go-programming-from-beginners-to-masters-is-published/</guid><description>本文永久链接 – https://tonybai.com/2022/01/15/go-programming-from-beginners-to-masters-is-published 历时三年多编写的Go语言进阶类图书《Go语言精进之路：从新手到高手的编程思想、方法和技巧》系列1、2册终于在2021年12月17日出版了！ 2021年的最后一天，我收到了机械工业出版社华章分社编辑罗词亮老师从微信...</description></item><item><title>2021年博客回顾与总结</title><link>https://tonybai.com/2021/12/31/2021-blog-summary/</link><pubDate>Fri, 31 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/31/2021-blog-summary/</guid><description>本文永久链接 – https://tonybai.com/2021/12/31/2021-blog-summary 2021年对我来说是极其充实的一年。 在这一年里，生活上的充实体现在**带娃**上。除了要带不到一岁的二宝，还要辅导大宝学习，陪大宝上补习班。 工作中，由于我刚入行智能网联汽车这个行业，要学的东西很多，要做的东西也很很多，要解决的问题同样很多，每天都十分忙碌。 业余时间，我还实现了“...</description></item><item><title>切换到Go 1.18后的第一件事：将interface{}全部替换为any</title><link>https://tonybai.com/2021/12/18/replace-empty-interface-with-any-first-after-switching-to-go-1-18/</link><pubDate>Sat, 18 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/18/replace-empty-interface-with-any-first-after-switching-to-go-1-18/</guid><description>本文永久链接 – https://tonybai.com/2021/12/18/replace-empty-interface-with-any-first-after-switching-to-go-1-18 伴随着Go 1.18 beta1版本的发布，很多Gopher已经迫不及待地下载该版本并体验其中的新特性了！ Go 1.18 beta1到手后，**你想做的第一件事是什么呢**？ 说到这里，...</description></item><item><title>Gopher部落：简单复盘这一年</title><link>https://tonybai.com/2021/12/17/gopher-tribe-first-anniversary-review/</link><pubDate>Fri, 17 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/17/gopher-tribe-first-anniversary-review/</guid><description>本文永久链接 – https://tonybai.com/2021/12/17/gopher-tribe-first-anniversary-review 简要复盘 12月15日早上，手机收到知识星球app的一条推送信息，提示我的星球“Gopher部落”迎来了第100位星友： 我这才想起来Gopher部落星球已经创建满一年了。从上面的星球名片来看，准确来说是390多天。在这390多天中，我发表了5...</description></item><item><title>Go 1.18 Beta1版本发布，支持泛型[译]</title><link>https://tonybai.com/2021/12/15/go-1-18-beta1/</link><pubDate>Wed, 15 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/15/go-1-18-beta1/</guid><description>本文永久链接 – https://tonybai.com/2021/12/15/go-1-18-beta1 北京时间今天凌晨，美国时间12月14日，Go核心团队技术负责人Russ Cox在Go官博发表文章《Go 1.18 Beta 1 is available, with generics》，正式宣布Go 1.18的第一个预览版Go 1.18 beta1发布！Go团队这次少见的通过官博来发布一个b...</description></item><item><title>使用Docker容器突破客户端6w可用端口的误区</title><link>https://tonybai.com/2021/12/14/the-misconception-of-using-docker-to-break-out-of-6w-ports-of-the-client/</link><pubDate>Tue, 14 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/14/the-misconception-of-using-docker-to-break-out-of-6w-ports-of-the-client/</guid><description>本文永久链接 – https://tonybai.com/2021/12/14/the-misconception-of-using-docker-to-break-out-of-6w-ports-of-the-client 近期的一个项目刚刚完成了第一个版本的开发，经过一段时间的自测与集成测试，功能问题已经不是重点了。项目在初期设定了性能目标，压测与性能优化势在必行，因此这一阶段我们都在做压测前...</description></item><item><title>惊了！原来Go语言也有隐式转型</title><link>https://tonybai.com/2021/12/02/go-has-implicit-type-convertion/</link><pubDate>Thu, 02 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/02/go-has-implicit-type-convertion/</guid><description>本文永久链接 – https://tonybai.com/2021/12/02/go-has-implicit-type-convertion 我的极客时间专栏《Go语言第一课》上线后收到了很多学员的反馈，大家提出了很多显然是经过认真思考的高水平问题。有些时候我也会被这些问题所“难倒”，比如昨天我在后台看到的这个问题。 我把这个问题整理为下面代码文本，方便大家copy和重现问题： ``` pack...</description></item><item><title>Go 1.18新特性前瞻：原生支持Fuzzing测试</title><link>https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18/</link><pubDate>Wed, 01 Dec 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18/</guid><description>本文永久链接 – https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18 今年6月初，Go官博发表了一篇名为《Fuzzing is Beta Ready》的文章，文中称gotip版本已经原生支持Fuzzing并开始了公测。这意味着Fuzzing将以一等公民(first-class citizen)的身份正式加入到即将于2022年2...</description></item><item><title>ants：在Submit中再调用当前Pool的Submit可能导致阻塞</title><link>https://tonybai.com/2021/11/27/ants-call-submit-in-submit-may-cause-blocking/</link><pubDate>Sat, 27 Nov 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/11/27/ants-call-submit-in-submit-may-cause-blocking/</guid><description>本文永久链接 – https://tonybai.com/2021/11/27/ants-call-submit-in-submit-may-cause-blocking 1. goroutine pool的必要性 Go在并发程序方面的一个小创新就是支持轻量级用户线程goroutine，不过虽然goroutine很轻，但并不是免费的，尤其是Go程序中存在大量goroutine反复启停时(比如采用每...</description></item><item><title>使用Docker Compose构建一键启动的运行环境</title><link>https://tonybai.com/2021/11/26/build-all-in-one-runtime-environment-with-docker-compose/</link><pubDate>Fri, 26 Nov 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/11/26/build-all-in-one-runtime-environment-with-docker-compose/</guid><description>本文永久链接 – https://tonybai.com/2021/11/26/build-all-in-one-runtime-environment-with-docker-compose 如今，不管你是否喜欢，不管你是否承认，微服务架构模式的流行就摆在那里。作为架构师的你，如果再将系统设计成个大单体结构，那么即便不懂技术的领导，都会给你送上几次白眼。好吧，妥协了！开拆！“没吃过猪肉，还没见过...</description></item><item><title>Go 1.18新特性前瞻：Go工作区模式</title><link>https://tonybai.com/2021/11/12/go-workspace-mode-in-go-1-18/</link><pubDate>Fri, 12 Nov 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/11/12/go-workspace-mode-in-go-1-18/</guid><description>本文永久链接 – https://tonybai.com/2021/11/12/go-workspace-mode-in-go-1-18 **Go 1.18版本如无意外，将于2022年2月发布**。 在这个版本中，除了包含万众期待的Go泛型之外，还包含很多实用的功能特性，Go工作区模式(Go workspace mode)就是其中之一，它弥补了当前go module构建模式的一些不足，堪称是**g...</description></item><item><title>Go，12周年</title><link>https://tonybai.com/2021/11/11/go-opensource-12-years/</link><pubDate>Thu, 11 Nov 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/11/11/go-opensource-12-years/</guid><description>本文永久链接 – https://tonybai.com/2021/11/11/go-opensource-12-years 2009年11月10日，Go语言正式对外发布并开源。如今，距那一历史时刻已经过去12年了。今早Go核心团队技术负责人Russ Cox在Go官博撰文庆祝Go开源12周年，他回顾了这一年来发布的Go 1.16与Go 1.17版本给Go与Go社区带来的变化，粗略总结了Go核心团队...</description></item><item><title>Ian Lance Taylor：Go泛型使用的一般准则</title><link>https://tonybai.com/2021/11/07/using-generics-in-go/</link><pubDate>Sun, 07 Nov 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/11/07/using-generics-in-go/</guid><description>本文永久链接 – https://tonybai.com/2021/11/07/using-generics-in-go 在近期Google Open Source Live的Go Day 2021环节，Go泛型的主要设计者Ian Lance Taylor做了Using Generics in Go的简短演讲(国内地址在这里)。这篇演讲的重点**不是即将于Go 1.18版本降临的Go泛型的语法细节...</description></item><item><title>Go 1.18对泛型的支持策略</title><link>https://tonybai.com/2021/10/28/expectations-for-generics-in-go-1-18/</link><pubDate>Thu, 28 Oct 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/10/28/expectations-for-generics-in-go-1-18/</guid><description>本文永久链接 – https://tonybai.com/2021/10/28/expectations-for-generics-in-go-1.18 2021年10月中旬，Go语言之父Rob Pike在github上的Go项目中发了一条issue：建议不在Go 1.18的标准库中使用泛型。 不得不说“姜还是老的辣”！Rob Pike的理由很简单，Go泛型是Go诞生以来最大的一次语言变化，Go ...</description></item><item><title>Go语言第一课背后的那些事儿</title><link>https://tonybai.com/2021/10/25/the-things-behind-the-first-lesson-of-go-language/</link><pubDate>Mon, 25 Oct 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/10/25/the-things-behind-the-first-lesson-of-go-language/</guid><description>本文永久链接 – https://tonybai.com/2021/10/25/the-things-behind-the-first-lesson-of-go-language 《Go语言第一课》正式上线一周多了，从编辑和运营老师那边反馈，成绩似乎还不错，感谢大家的捧场！今天和大家说说专栏《Go语言第一课》背后的那些事儿。 年初策划：Gopher的《C++ Primer》 学过C++的童鞋想必都...</description></item><item><title>Tony Bai带你入门Go语言</title><link>https://tonybai.com/2021/10/15/your-first-go-course-by-tonybai/</link><pubDate>Fri, 15 Oct 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/10/15/your-first-go-course-by-tonybai/</guid><description>本文永久链接 – https://tonybai.com/2021/10/15/your-first-go-course-by-tonybai 没错，Tony Bai就是我。这次终于轮到我了！ 极客时间在10月13日正式上线了我的Go语言专栏：《Tony Bai·Go语言第一课》。 * * * 现如今，越来越多的程序员因为自己或公司的需求，逐渐转成Go开发。当前国内外一线，包括 BAT 等大厂，以...</description></item><item><title>Go语言之父谈Go编程语言与环境</title><link>https://tonybai.com/2021/10/06/the-go-programming-language-and-environment/</link><pubDate>Wed, 06 Oct 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/10/06/the-go-programming-language-and-environment/</guid><description>本文永久链接 – https://tonybai.com/2021/10/06/the-go-programming-language-and-environment 2021年中旬，Go语言联合创始人Rob Pike应邀在线出席由UNSW Computing(悉尼新南威尔士大学计算机)组织主办的John Lions Distinguished Lectures，会上Rob Pike以Go之父身份...</description></item><item><title>gRPC服务的响应设计</title><link>https://tonybai.com/2021/09/26/the-design-of-the-response-for-grpc-server/</link><pubDate>Sun, 26 Sep 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/09/26/the-design-of-the-response-for-grpc-server/</guid><description>本文永久链接 – https://tonybai.com/2021/09/26/the-design-of-the-response-for-grpc-server 1. 服务端响应的现状 做后端服务的开发人员对错误处理总是很敏感的，因此在做服务的响应(response/reply)设计时总是会很慎重。 如果后端服务选择的是HTTP API(rest api)，比如json over http，A...</description></item><item><title>gRPC客户端的那些事儿</title><link>https://tonybai.com/2021/09/17/those-things-about-grpc-client/</link><pubDate>Fri, 17 Sep 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/09/17/those-things-about-grpc-client/</guid><description>本文永久链接 – https://tonybai.com/2021/09/17/those-things-about-grpc-client 在云原生与微服务主导架构模式的时代，内部服务间交互所采用的通信协议选型无非就是两类：HTTP API(RESTful API)和RPC。在如今的硬件配置与网络条件下，现代RPC实现的性能一般都是好于HTTP API的。我们以json over http与gR...</description></item><item><title>小厂内部私有Go module拉取方案</title><link>https://tonybai.com/2021/09/03/the-approach-to-go-get-private-go-module-in-house/</link><pubDate>Fri, 03 Sep 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/09/03/the-approach-to-go-get-private-go-module-in-house/</guid><description>本文永久链接 – https://tonybai.com/2021/09/03/the-approach-to-go-get-private-go-module-in-house 1. 问题来由 Go 1.11版本引入Go module后，Go命令拉取依赖的公共go module不再是“痛点”。如下图所示： 图：从公司内部经由公共GOPROXY服务拉取公共go module 我们在公司/组织内部仅...</description></item><item><title>Brooks、Wirth和Go[译]</title><link>https://tonybai.com/2021/08/25/brooks-wirth-and-go/</link><pubDate>Wed, 25 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/25/brooks-wirth-and-go/</guid><description>本文永久链接 – https://tonybai.com/2021/08/25/brooks-wirth-and-go 本文翻译自瑞典程序员Fredrik Holmqvist的博客文章《Brooks, Wirth and Go》。 现在是1975年。 程序员们带着FORTRAN代码回来了，不过使用的是穿孔卡片的形式。 图：记录代码的穿孔卡片(图片来自punchcardreader.com，译者加)...</description></item><item><title>Go 1.17新特性详解：使用基于寄存器的调用惯例</title><link>https://tonybai.com/2021/08/20/using-register-based-calling-convention-in-go-1-17/</link><pubDate>Fri, 20 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/20/using-register-based-calling-convention-in-go-1-17/</guid><description>本文永久链接 – https://tonybai.com/2021/08/20/using-register-based-calling-convention-in-go-1-17 除了Go语言特性与go module有重要变化之外，Go编译器与Go运行时也都有着优化与改进，这两方面的变化对Go程序的构建与运行影响巨大。在这个系列的最后一篇中，我们来看看编译器与运行时中那些值得关注的变化。 1. ...</description></item><item><title>Go 1.17新特性详解：module依赖图修剪与延迟module加载</title><link>https://tonybai.com/2021/08/19/go-module-changes-in-go-1-17/</link><pubDate>Thu, 19 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/19/go-module-changes-in-go-1-17/</guid><description>本文永久链接 – https://tonybai.com/2021/08/19/go-module-changes-in-go-1-17 Go module的引入终于让Go语言有了自己的包依赖管理标准机制与工具，虽说它的引入与推广过程略显坎坷，但不得不承认Go 1.11及之后的每一次Go版本发布，Go module都在进步！在Go 1.17版本中亦是如此，本篇我们就来详细聊聊在Go 1.17版本中...</description></item><item><title>Go 1.17新特性详解：支持将切片转换为数组指针</title><link>https://tonybai.com/2021/08/18/go-language-specs-changes-in-go-1-17/</link><pubDate>Wed, 18 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/18/go-language-specs-changes-in-go-1-17/</guid><description>本文永久链接 – https://tonybai.com/2021/08/18/go-language-specs-changes-in-go-1-17 Go属于那种极简的语言，从诞生到现在语言自身特性变化很小，不会像其他主流语言那样走“你有的我也要有”的特性融合路线。因此新语言特性对于Gopher来说属于“稀缺品”，属于“供不应求”那类事物^\_^。这也直接导致了每次Go新版本发布，我们都要首先...</description></item><item><title>Go 1.17中值得关注的几个变化</title><link>https://tonybai.com/2021/08/17/some-changes-in-go-1-17/</link><pubDate>Tue, 17 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/17/some-changes-in-go-1-17/</guid><description>本文永久链接 – https://tonybai.com/2021/08/17/some-changes-in-go-1-17 Go核心开发团队在去年GopherCon大会上给Go泛型的定调是在2022年2月份的Go 1.18版本中发布，那可是自Go诞生以来语法规范变动最大的一次，这让包括笔者在内的全世界的Gopher们都满怀期待。 不过别忘了，在Go 1.18这个“网红版本”发布前，还有一个“实...</description></item><item><title>一文告诉你如何帮助测试Go语言Beta公测版或RC候选发布版</title><link>https://tonybai.com/2021/08/11/how-to-test-go-beta-or-rc/</link><pubDate>Wed, 11 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/11/how-to-test-go-beta-or-rc/</guid><description>本文永久链接 – https://tonybai.com/2021/08/11/how-to-test-go-beta-or-rc Go 1.17已经发布到RC2版本！正式版最早将在8月中旬发布，最迟也不会晚于月底。对于喜欢尝鲜的Gopher而言，在体验Go 1.17的新特性的同时，也不要忘了为Go语言项目做做贡献！贡献什么呢？其实很简单，就是在尝鲜的同时，对Go语言的Beta公测版以及RC发布候...</description></item><item><title>Go中被闭包捕获的变量何时会被回收</title><link>https://tonybai.com/2021/08/09/when-variables-captured-by-closures-are-recycled-in-go/</link><pubDate>Mon, 09 Aug 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/08/09/when-variables-captured-by-closures-are-recycled-in-go/</guid><description>本文永久链接 – https://tonybai.com/2021/08/09/when-variables-captured-by-closures-are-recycled-in-go 1. Go函数闭包 Go语言原生提供了对闭包(closure)的支持。在Go语言中，闭包就是函数字面值。Go规范中是这样诠释闭包的： &amp;gt; 函数字面值(function literals)是闭包：它们可以引用其包...</description></item><item><title>Go基于I/O多路复用的TCP协议流解析实践</title><link>https://tonybai.com/2021/07/31/io-multiplexing-model-tcp-stream-protocol-parsing-practice-in-go/</link><pubDate>Sat, 31 Jul 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/07/31/io-multiplexing-model-tcp-stream-protocol-parsing-practice-in-go/</guid><description>本文永久链接 – https://tonybai.com/2021/07/31/io-multiplexing-model-tcp-stream-protocol-parsing-practice-in-go 在《Go经典阻塞式TCP协议流解析的实践》一文中，我们基于Go经典的阻塞I/O模型实现了一个基于TCP流的自定义协议的解析。这种**one-connection-per-goroutine*...</description></item><item><title>Go经典阻塞式TCP协议流解析的实践</title><link>https://tonybai.com/2021/07/28/classic-blocking-network-tcp-stream-protocol-parsing-practice-in-go/</link><pubDate>Wed, 28 Jul 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/07/28/classic-blocking-network-tcp-stream-protocol-parsing-practice-in-go/</guid><description>本文永久链接 – https://tonybai.com/2021/07/28/classic-blocking-network-tcp-stream-protocol-parsing-practice-in-go 1. Go经典阻塞I/O的TCP网络编程模型 Go语言诞生十多年来取得了飞速发展，并得到了全世界开发者的广泛接纳和应用，其应用领域广泛，包括：Web服务、数据库、网络编程、系统编程、D...</description></item><item><title>一文搞懂Go语言的plugin</title><link>https://tonybai.com/2021/07/19/understand-go-plugin/</link><pubDate>Mon, 19 Jul 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/07/19/understand-go-plugin/</guid><description>本文永久链接 – https://tonybai.com/2021/07/19/understand-go-plugin 要历数Go语言中还有哪些我还没用过的特性，在Go 1.8版本中引入的go plugin算一个。近期想给一个网关类平台设计一个插件系统，于是想起了go plugin^\_^。 Go plugin支持将Go包编译为共享库（.so）的形式单独发布，主程序可以在运行时动态加载这些编译为...</description></item><item><title>一文告诉你如何用好uber开源的zap日志库</title><link>https://tonybai.com/2021/07/14/uber-zap-advanced-usage/</link><pubDate>Wed, 14 Jul 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/07/14/uber-zap-advanced-usage/</guid><description>本文永久链接 – https://tonybai.com/2021/07/14/uber-zap-advanced-usage 1. 引子 日志在后端系统中有着重要的地位，通过日志不仅可以直观看到程序的当前运行状态，更重要的是日志可以在程序发生问题时为开发人员提供线索。 在Go生态中，logrus可能是使用最多的Go日志库，它不仅提供结构化的日志，更重要的是与标准库log包在api层面兼容。在性能...</description></item><item><title>使用section.key的形式读取ini配置项</title><link>https://tonybai.com/2021/07/10/read-ini-config-item-by-passing-section-key/</link><pubDate>Sat, 10 Jul 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/07/10/read-ini-config-item-by-passing-section-key/</guid><description>本文永久链接 – https://tonybai.com/2021/07/10/read-ini-config-item-by-passing-section-key 配置文件读取是很多Go项目必备的功能，这方面社区提供的方案也相对成熟稳定。但之前写这部分代码时除了使用了针对不同配置文件格式（比如：ini、toml等）的驱动包之外，很少直接使用第三方包对读取出的配置项的值进行管理。于是我们就面对这...</description></item><item><title>使用go-metrics在Go应用中增加度量</title><link>https://tonybai.com/2021/07/06/add-metrics-for-go-application-using-go-metrics/</link><pubDate>Tue, 06 Jul 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/07/06/add-metrics-for-go-application-using-go-metrics/</guid><description>本文永久链接 – https://tonybai.com/2021/07/06/add-metrics-for-go-application-using-go-metrics Go语言内置expvar，基于expvar提供的对基础度量的支持能力，我们可以自定义各种度量（metrics）。但是expvar仅仅是提供了最底层的度量定义支持，对于一些复杂的度量场景，第三方或自实现的metrics包必不可...</description></item><item><title>通过实例理解Go Execution Tracer</title><link>https://tonybai.com/2021/06/28/understand-go-execution-tracer-by-example/</link><pubDate>Mon, 28 Jun 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/06/28/understand-go-execution-tracer-by-example/</guid><description>本文永久链接 – https://tonybai.com/2021/06/28/understand-go-execution-tracer-by-example Netflix（奈飞公司）的性能架构师Brendan Gregg在其《BPF Performance Tools》一书中对tracing、sampling等概念做了细致描述，以帮助开发人员理解这些概念，并基于这些概念对性能优化辅助工具进...</description></item><item><title>使用functrace辅助进行Go项目源码分析</title><link>https://tonybai.com/2021/06/04/go-source-analysis-with-functrace/</link><pubDate>Fri, 04 Jun 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/06/04/go-source-analysis-with-functrace/</guid><description>本文永久链接 – https://tonybai.com/2021/06/04/go-source-analysis-with-functrace 在《像跟踪分布式服务调用那样跟踪Go函数调用链》一文中，我们介绍了一种跟踪函数调用链的思路，并给出了一种实现functrace：https://github.com/bigwhite/functrace。这个小工具不仅仅是分享给大家的，我自己在工作和学...</description></item><item><title>通过实例理解Go逃逸分析</title><link>https://tonybai.com/2021/05/24/understand-go-escape-analysis-by-example/</link><pubDate>Mon, 24 May 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/05/24/understand-go-escape-analysis-by-example/</guid><description>本文永久链接 – https://tonybai.com/2021/05/24/understand-go-escape-analysis-by-example 翻看了一下自己的Go文章归档，发现自己从未专门写过有关Go逃逸分析（escape analysis）的文章。关于Go变量的逃逸分析，大多数Gopher其实并不用关心，甚至可以无视。但是如果你将Go应用于性能敏感的领域，要完全压榨出Go应用...</description></item><item><title>minikube v1.20.0版本的一个bug</title><link>https://tonybai.com/2021/05/14/a-bug-of-minikube-1-20/</link><pubDate>Fri, 14 May 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/05/14/a-bug-of-minikube-1-20/</guid><description>本文永久链接 – https://tonybai.com/2021/05/14/a-bug-of-minikube-1-20 近期在研究dapr(分布式应用运行时)，这是一个很朴素却很棒的想法，目前大厂，如阿里和鹅厂都有大牛在研究该项目，甚至是利用dapr落地了部分应用。关于dapr，后续我也会用单独的文章详细说说。 dapr不仅支持k8s部署，还支持本地部署，并可以对接多个世界知名的公有云厂商的...</description></item><item><title>Go标准库http与fasthttp服务端性能比较</title><link>https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp/</link><pubDate>Sun, 25 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp/</guid><description>本文永久链接 – https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp 1. 背景 Go初学者学习Go时，在编写了经典的“hello, world”程序之后，可能会迫不及待的体验一下Go强大的标准库，比如：用几行代码写一个像下面示例这样拥有完整功能的web server： ``` // 来自https:...</description></item><item><title>使用reflect包在反射世界里读写各类型变量</title><link>https://tonybai.com/2021/04/19/variable-operation-using-reflection-in-go/</link><pubDate>Mon, 19 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/19/variable-operation-using-reflection-in-go/</guid><description>本文永久链接 – https://tonybai.com/2021/mm/dd/variable-operation-using-reflection-in-go Go在标准库中提供的reflect包让Go程序具备运行时的反射能力(reflection)，但这种反射能力也是一把“双刃剑”，它在解决一类特定问题方面具有优势，但也带来了逻辑不清晰、性能问题以及难于发现问题和调试等不足。不过从Go诞生伊...</description></item><item><title>给expvarmon插上数据持久化的“翅膀”</title><link>https://tonybai.com/2021/04/14/expvarmon-save-and-convert-to-xlsx/</link><pubDate>Wed, 14 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/14/expvarmon-save-and-convert-to-xlsx/</guid><description>本文永久链接 – https://tonybai.com/2021/04/14/expvarmon-save-and-convert-to-xlsx 1\. expvar包与expvarmon Go在标准库中为暴露Go应用内部指标数据提供了标准的对外接口，这就是expvar包。expvar包通过init函数将内置的expvarHandler(一个标准http HandlerFunc)注册到http...</description></item><item><title>Go标准库flag包的“小陷阱”</title><link>https://tonybai.com/2021/04/12/pitfall-in-std-flag-pkg/</link><pubDate>Mon, 12 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/12/pitfall-in-std-flag-pkg/</guid><description>本文永久链接 – https://tonybai.com/2021/04/12/pitfall-in-std-flag-pkg Go语言号称“自带电池(battery-included)”，这意味着Go标准库可开箱即用，为Gopher提供了功能丰富的常用工具包，足以应付多数日常开发所需。尤其在Go语言擅长的领域，Go标准库工具包更是有着广泛的应用。下图是Go官方2020年用户调查的结果： 我们看到...</description></item><item><title>Go语言“十诫”[译]</title><link>https://tonybai.com/2021/04/09/ten-commandments-of-go/</link><pubDate>Fri, 09 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/09/ten-commandments-of-go/</guid><description>本文永久链接 – https://tonybai.com/2021/04/09/ten-commandments-of-go 本文翻译自John Arundel的《Ten commandments of Go》。全文如下： 作为一名全职的Go语言作家和老师，我花了很多时间和学生们一起，帮助他们写出更清晰、更好、更有用的Go程序。我发现，我给他们的建议可以归纳总结为一套通用原则，在这里我将这些原则分...</description></item><item><title>Go泛型语法又出“幺蛾子”：引入type set概念和移除type list中的type关键字</title><link>https://tonybai.com/2021/04/07/go-generics-use-type-sets-to-remove-type-keyword/</link><pubDate>Wed, 07 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/07/go-generics-use-type-sets-to-remove-type-keyword/</guid><description>本文永久链接 – https://tonybai.com/2021/04/07/go-generics-use-type-sets-to-remove-type-keyword 近日，Go泛型语法负责人之一的Ian Lance Taylor发布了一个issue，说明go团队想引入新的type set概念，并去除原Go泛型方案中置于interface定义中的type list中的type关键字。 对...</description></item><item><title>http.Client的连接行为控制详解</title><link>https://tonybai.com/2021/04/02/go-http-client-connection-control/</link><pubDate>Fri, 02 Apr 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/04/02/go-http-client-connection-control/</guid><description>1\. http包默认客户端 Go语言以“自带电池”闻名，很多开发者对Go自带的功能丰富的标准库喜爱有加。而在Go标准库中，net/http包又是最受欢迎和最常用的包之一，我们用几行代码就能生成一个支持大并发、性能中上的http server。而http.Client也是用途最为广泛的http客户端，其性能也可以满足多数情况下的需求。知名女gopherJaana Dogan开源的类apache a...</description></item><item><title>Go语言中常见的几种反模式[译]</title><link>https://tonybai.com/2021/03/31/common-anti-patterns-in-go/</link><pubDate>Wed, 31 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/31/common-anti-patterns-in-go/</guid><description>本文翻译自Saif Sadiq的文章《Common anti-patterns in Go》。 众所周知，编码是一门艺术，就像每个拥有精湛艺术并为之感到骄傲的工匠一样，我们作为开发人员也为我们编写的代码感到自豪。为了获得最佳效果，艺术家不断寻找可提高其手艺的方法和工具。同样，作为开发人员，我们也在不断提高自己的技能，并对”如何写出好的代码”这个最重要的问题的答案保持好奇。 弗雷德里克·布鲁克斯（F...</description></item><item><title>Go语言的“黑暗角落”：盘点学习Go语言时遇到的那些陷阱[译]（第二部分）</title><link>https://tonybai.com/2021/03/29/darker-corners-of-go-part2/</link><pubDate>Mon, 29 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/29/darker-corners-of-go-part2/</guid><description>本文翻译自Rytis Bieliunas的文章《Darker Corners of Go》。 第一部分参见[《Go语言的“黑暗角落”：盘点学习Go语言时遇到的那些陷阱\[译\]（第一部分）》](https://tonybai.com/2021/03/29/darker-corners-of-go-part1) 7\. 字符串和字节数组 ------------ 1) Go中的字符串 Go字符串的内...</description></item><item><title>Go语言的“黑暗角落”：盘点学习Go语言时遇到的那些陷阱[译]（第一部分）</title><link>https://tonybai.com/2021/03/29/darker-corners-of-go-part1/</link><pubDate>Mon, 29 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/29/darker-corners-of-go-part1/</guid><description>本文翻译自Rytis Bieliunas的文章《Darker Corners of Go》。 &amp;gt; 译注：若干年前，Kyle Quest曾发过一篇名为“50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs”的文章，仿效著名的《C Traps and Pitfalls》编写了50条Go语言的陷阱与缺陷，一时在G...</description></item><item><title>使用Go实现可用select监听的队列</title><link>https://tonybai.com/2021/03/26/implement-a-queue-with-select-listener-in-go/</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/26/implement-a-queue-with-select-listener-in-go/</guid><description>1\. 背景与选型 和《基于Redis Cluster的分布式锁实现以互斥方式操作共享资源》一文一样，今天要说的Go队列方案也是有一定项目背景的。 5G消息方兴未艾！前一段时间从事了一段时间5G消息网关的研发，但凡涉及类似消息业务的网关，我们一般都离不开**队列**这种数据结构的支持。这个5G消息网关项目采用的是Go技术栈开发，那么我们应该如何为它选择一个**与业务模型匹配且性能不差**的实现呢？...</description></item><item><title>对Go 1.16 io/fs设计的第一感觉：得劲儿！</title><link>https://tonybai.com/2021/03/23/io-fs-interface-is-an-excellent-design/</link><pubDate>Tue, 23 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/23/io-fs-interface-is-an-excellent-design/</guid><description>1\. 设计io/fs的背景 Go语言的接口是Gopher最喜欢的语法元素之一，其隐式的契约满足和“当前唯一可用的泛型机制”的特质让其成为面向组合编程的强大武器，其存在为Go建立事物抽象奠定了基础，同时也是建立抽象的主要手段。 Go语言从诞生至今，最成功的接口定义之一就是io.Writer和io.Reader接口： type Writer interface { Write(p []byte) (...</description></item><item><title>Rust vs. Go：为什么强强联合会更好</title><link>https://tonybai.com/2021/03/15/rust-vs-go-why-they-are-better-together/</link><pubDate>Mon, 15 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/15/rust-vs-go-why-they-are-better-together/</guid><description>本文翻译自乔纳森·特纳（Jonathan Turner）和史蒂夫·弗朗西亚（Steve Francia）的文章《Rust vs. Go: Why They’re Better Together》。 &amp;gt; 史蒂夫·弗朗西亚（Steve Francia）：在过去的25年里，Steve Francia建立了一些最具创新性和成功的技术和公司，这些技术和公司已经成为云计算的基础，被全世界的企业和开发者所接受。...</description></item><item><title>究竟是什么让Go语言成为恶意软件作者的最爱</title><link>https://tonybai.com/2021/03/07/go-malware-round-up-2020/</link><pubDate>Sun, 07 Mar 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/03/07/go-malware-round-up-2020/</guid><description>2020年5月份，Go语言之父Rob Pike接受了evrone.com的专访。当Rob Pike老爷子被问及多年来他看到过最奇怪、最有创意或有趣的Go用法或最让他惊讶的是什么时，老爷子是这么回答的： &amp;gt; Rob：最大的惊喜是当我们得知Go被用于编写恶意软件时。您无法控制谁将使用您的作品或他们将如何使用它。 近期安全技术公司Intezer发布了一份名为《Year of the Gopher, A ...</description></item><item><title>Go 1.16中值得关注的几个变化</title><link>https://tonybai.com/2021/02/25/some-changes-in-go-1-16/</link><pubDate>Thu, 25 Feb 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/02/25/some-changes-in-go-1-16/</guid><description>辛丑牛年初七开工大吉的日子(2021.2.18)，Go核心开发团队为中国Gopher们献上了大礼 – Go 1.16版本正式发布了！国内Gopher可以在Go中国官网上下载到Go 1.16在各个平台的安装包： 2020年双12，Go 1.16进入freeze状态，即不再接受新feature，仅fix bug、编写文档和接受安全更新等，那时我曾写过一篇名为《Go 1.16新功能特性不完全前瞻》的文章...</description></item><item><title>“能力越大，责任越大” – Go语言之父详解将于Go 1.18发布的Go泛型</title><link>https://tonybai.com/2021/02/18/typing-generic-go-by-griesemer-at-gophercon-2020/</link><pubDate>Thu, 18 Feb 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/02/18/typing-generic-go-by-griesemer-at-gophercon-2020/</guid><description>&amp;gt; 注：本文是首发于笔者微信公众号“iamtonybai”上的付费文章，这里免费分享给大家！ 在2020.11.9~11.13举行的全球最具影响力的Go语言技术大会GopherCon 2020上，Go语言之父之一的Robert Griesemer为全世界Gopher们带来了本次大会最重量级的演讲**“Typing \[Generic\] Go”**。 图：Robert Griesemer带来的有关...</description></item><item><title>基于Redis Cluster的分布式锁实现以互斥方式操作共享资源</title><link>https://tonybai.com/2021/02/13/operate-with-shared-resources-in-a-mutually-exclusive-way-through-distributed-lock-implemented-by-redis-cluster/</link><pubDate>Sat, 13 Feb 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/02/13/operate-with-shared-resources-in-a-mutually-exclusive-way-through-distributed-lock-implemented-by-redis-cluster/</guid><description>今天要说的技术方案也是有一定项目背景的。在上一个项目中，我们需要对一个redis集群中过期的key进行处理，这是一个分布式 系统，考虑到高可用性，需要具备过期处理功能的服务有多个副本，这样我们就要求在同一时间内仅有一个副本可以对过期的key&amp;gt;进行处理，如果该副本挂掉，系统会在其他副本中再挑选出一个来处理过期的key。 很显然，这里涉及到一个选主(leader election)的过程。每当涉及选主...</description></item><item><title>以单件方式创建和获取数据库实例</title><link>https://tonybai.com/2021/02/09/create-and-get-db-access-instance-through-singleton/</link><pubDate>Tue, 09 Feb 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/02/09/create-and-get-db-access-instance-through-singleton/</guid><description>在屡次的Go用户调查中，使用Go语言进行Web服务/API开发都占据了Go语言用途调查结果的头部位置。下面是知名Go IDE goland的母公司JetBrains最新发布的Go当前状态报告(2021.2.3)中的截图： 开发Web或API服务，难免会与数据库打交道。如今创建数据库实例并访库的技术已经是很成熟了，于是就有了下面这样的程序结构： 上面这个图片中，Web服务中的每个要与数据库进行数据交...</description></item><item><title>Go语言学习技术路线图2021发布了！</title><link>https://tonybai.com/2021/02/08/go-programming-language-learning-roadmap-2021/</link><pubDate>Mon, 08 Feb 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/02/08/go-programming-language-learning-roadmap-2021/</guid><description>上一次与CSDN的合作还要追溯到《程序员》杂志仍然发行的时代(网络发行)，最后一次投稿是2017年末的《追求极简：Docker镜像构建演化史》。 今年元旦前，CSDN编辑周翔老师邀请我参与他们策划的“IT人才成长路线图”，合作编写其中的Go语言学习技术路线图。**出于让更多开发者学习Go语言、加入Go社区、壮大Go生态的公心考虑以及扩大个人影响力的私心考虑，我接受了邀请**。 去年圣诞节的前一周我...</description></item><item><title>使用multipart/form-data实现文件的上传与下载</title><link>https://tonybai.com/2021/01/16/upload-and-download-file-using-multipart-form-over-http/</link><pubDate>Sat, 16 Jan 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/01/16/upload-and-download-file-using-multipart-form-over-http/</guid><description>1\. Form简介 **Form**(中文译为表单)，是HTML标记语言中的重要语法元素。一个Form不仅包含正常的文本内容、标记等，还包含被称为控件的特殊元素。用户通常通过修改控件（比如：输入文本、选择菜单项等）来“完成”表单，然后将表单数据以HTTP Get或Post请求的形式提交（submit）给Web服务器。 &amp;gt; 很多初学者总是混淆HTML和HTTP。其实，http通常作为html传输的...</description></item><item><title>通过实例理解Go标准库http包是如何处理keep-alive连接的</title><link>https://tonybai.com/2021/01/08/understand-how-http-package-deal-with-keep-alive-connection/</link><pubDate>Fri, 08 Jan 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/01/08/understand-how-http-package-deal-with-keep-alive-connection/</guid><description>HTTP是如今互联网的基础协议，承载了互联网上的绝大部分应用层流量，并且从目前趋势来看，在未来10年，http仍然会是互联网应用的主要协议。Go语言自带“电池”，基于Go标准库我们可以轻松建立起一个http server处理客户端http请求，或创建一个http client向服务端发送http请求。 最初早期的http 1.0协议只支持短连接，即客户端每发送一个请求，就要和服务器端建立一个新TC...</description></item><item><title>Go语言很无聊…其实它妙不可言！[译]</title><link>https://tonybai.com/2021/01/07/go-is-boring/</link><pubDate>Thu, 07 Jan 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/01/07/go-is-boring/</guid><description>&amp;gt; 无聊是一种很奇妙的状态，它可以稀释掉人类的一切情感。- 《古董局中局》马伯庸 在GopherCon 2020技术大会上(线上虚拟大会)，Jon Bodner为全球gopher们做了主题为“Go Is Boring”的精彩演讲(关注公众号**iamtonybai**，发送**gophercon2020**即可得到GopherCon 2020技术大会幻灯片资料)。 其实早在2020年6月，Jon ...</description></item><item><title>Hugo作者、Go核心开发团队成员谈诞生13年的Go语言：生态系统、演化与未来[译]</title><link>https://tonybai.com/2021/01/02/go-language-13-years/</link><pubDate>Sat, 02 Jan 2021 00:00:00 +0800</pubDate><guid>https://tonybai.com/2021/01/02/go-language-13-years/</guid><description>本文翻译自《Go Language at 13 Years: Ecosystem, Evolution, and Future in Conversation with Steve Francia》。 &amp;gt; 译注：Go开源于2009年，如果从那时算起，Go才11岁；但在Go核心开发团队眼中，Go的真正诞生年份是2007年，至今13个年头了。关于Go的演化简史可以参见我的专栏文章：《Go语言的前生今世...</description></item><item><title>2020年Go语言盘点：新冠大流行阻挡不了Go演进的步伐</title><link>https://tonybai.com/2020/12/30/the-2020-review-of-go-programming-language/</link><pubDate>Wed, 30 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/30/the-2020-review-of-go-programming-language/</guid><description>2020，这一六十年一遇的庚子年的确“名不虚传”。在这一年发生了很多事，而最受瞩目的事情莫过于**新冠疫情的全球大流行**。疫情给全球的经济带来了近似毁灭性的打击，给人们的生命带来了极大威胁，给人们的生活也带来了很大痛苦及不确定性。好在**这个糟糕的2020年马上就要过去了**！相信此时此刻每个人心中都会有一句呐喊：“**2020，快滚吧**！”。 然而肆虐的新冠疫情并没有阻挡住Go语言前进的坚实...</description></item><item><title>如何作废一个已发布的Go module版本，我来告诉你！</title><link>https://tonybai.com/2020/12/26/how-to-deprecate-a-published-version-of-some-specific-go-module/</link><pubDate>Sat, 26 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/26/how-to-deprecate-a-published-version-of-some-specific-go-module/</guid><description>Go语言自诞生以来，一路走到今天已经经历了11个年头了。其包依赖管理机制也从无到有，从vendor演化成了如今的Go module。Go module从Go 1.11进入gopher们视野，到目前的Go 1.15，其改进和优化一直在持续。在即将到来的Go 1.16中，Go module将成为默认包依赖管理模式(即默认GO111MODULE=on)。但即便如此，我们在进行go module的实践过程...</description></item><item><title>BPF和Go：在Linux中内省的现代方式[译]</title><link>https://tonybai.com/2020/12/25/bpf-and-go-modern-forms-of-introspection-in-linux/</link><pubDate>Fri, 25 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/25/bpf-and-go-modern-forms-of-introspection-in-linux/</guid><description>本文翻译自马可·凯瓦克（Marko Kevac）的《BPF and Go: Modern forms of introspection in Linux》(https://medium.com/bumble-tech/bpf-and-go-modern-forms-of-introspection-in-linux-6b9802682223)。 每个人都有自己喜欢的关于魔法的书。对于一个人来说是托...</description></item><item><title>Go语言有哪些“劣势”</title><link>https://tonybai.com/2020/12/24/the-disadvantages-of-go/</link><pubDate>Thu, 24 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/24/the-disadvantages-of-go/</guid><description>本文源于笔者对知乎上的一个问题“Go有哪些劣势？”(https://www.zhihu.com/question/300163211)的一次回答(https://www.zhihu.com/question/300163211/answer/1632229924)。当时随手花几分钟在手机上写了一些点。但事后我觉得应该再做一些系统地思考。在这里我就将更系统地思考后的答案整理并分享给大家。 关于Go语...</description></item><item><title>Go语言对ARM架构的支持与未来[译]</title><link>https://tonybai.com/2020/12/18/go-ports-until-202012/</link><pubDate>Fri, 18 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/18/go-ports-until-202012/</guid><description>本文翻译自Go官方博客文章《Go on ARM and Beyond》(https://blog.golang.org/ports)。 最近业界关于非x86处理器的讨论沸沸扬扬，所以我们认为值得简单的写一篇关于Go语言对这些非x86处理器的支持情况的文章。 对我们来说，Go的可移植性一直很重要，我们不会过度去适配任何特定的操作系统或架构。Go最初的开源版本包括对两种操作系统（Linux和MacOS...</description></item><item><title>一文告诉你神奇的Go内建函数源码在哪里</title><link>https://tonybai.com/2020/12/17/where-is-the-source-of-builtin-functions/</link><pubDate>Thu, 17 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/17/where-is-the-source-of-builtin-functions/</guid><description>&amp;gt; Go内建函数源码，我好像在哪里见过你。 – 佚名 1\. 何为Go内建函数 众所周知，Go是最简单的主流编程语言之一，截至Go 1.15版本，Go语言的关键字的规模依旧保持在25个： 很多刚入门的gopher可能会问：像bool、byte、error、true、iota甚至int都难道都不是关键字？没错！和其他语言不同，这些**标识符**并不是关键字，在Go中它们被称为**预定义标识符**。这...</description></item><item><title>如何查看历史版本的Go文档？嘘！答案我只告诉你！</title><link>https://tonybai.com/2020/12/15/how-to-see-the-manual-of-go-history-version/</link><pubDate>Tue, 15 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/15/how-to-see-the-manual-of-go-history-version/</guid><description>Go语言自开源至今已经11个年头了！截至本文发稿时，目前最新的Go版本为1.15，Go核心开发团队正紧锣密鼓的进行着Go 1.16版本的开发（现阶段主要是修复bug），该版本将在2021年2月份正式发布。 Go以“自带电池(battery included)”而为人所知，除了Go标准库的全面和强大之外，Go工具链的丰富和易用在主流编程语言中也是位列“执牛耳者”之列的，而Go文档查看工具就在Go工具...</description></item><item><title>Go 1.16新功能特性不完全前瞻</title><link>https://tonybai.com/2020/12/12/a-forward-look-to-new-feature-of-go-1-16/</link><pubDate>Sat, 12 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/12/a-forward-look-to-new-feature-of-go-1-16/</guid><description>2020年最后一个购物狂欢，双十二购物节“Gopher部落”知识星球推出双十二优惠！本年度最低折扣仅限今天一天。笔者建立“Gopher部落”旨在建立一个高质量的Go语言技术精品社区，持续不断的高质量技术资料分享，让加入的星友每天都有新收获！欢迎大家加入！ Go 1.16将于2021年2月发布。目前已经进入freeze状态，即不再接受新feature，仅fix bug、编写文档和接受安全更新等。 目...</description></item><item><title>Go函数调用链跟踪的一种实现思路</title><link>https://tonybai.com/2020/12/10/a-kind-of-thinking-about-how-to-trace-function-call-chain/</link><pubDate>Thu, 10 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/10/a-kind-of-thinking-about-how-to-trace-function-call-chain/</guid><description>这篇文章的初衷是想解答知乎上的一位知友提出的问题。没想到完成一种实现后，这个问题居然被删除了。那么既然实现了，就分享出来吧。问题的原文找不到了，问题大致是这样的： 一个程序中存在多个函数调用链都调用了函数D： A1 -&amp;gt; B1 &amp;gt; C1 -&amp;gt; D A2 -&amp;gt; B2 &amp;gt; C2 -&amp;gt; D A3 -&amp;gt; B3 -&amp;gt; C3 -&amp;gt; D ... ... 那么，如果某次函数D被调用时出现了问题，那么怎么知道这个D...</description></item><item><title>vendor目录是否需要提交到代码库中？答案全在这一篇</title><link>https://tonybai.com/2020/12/03/should-you-commit-the-vendor-folder-in-go/</link><pubDate>Thu, 03 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/03/should-you-commit-the-vendor-folder-in-go/</guid><description>如果您还在使用vendor机制管理依赖包，那么说明您肯定是处于下面两种情况之一！ * 还工作在传统的GOPATH模式下(使用Go 1.10及之前版本；或Go 1.11及之后版本，但GO111MODULE=off)，利用vendor管理目标包的特定依赖； * 工作在go module模式下，但仍然利用vendor管理目标module的特定依赖并使用go build -mod=vendor来构建。 那...</description></item><item><title>Go是编程语言世界的“特斯拉”</title><link>https://tonybai.com/2020/12/01/go-is-the-tesla-of-programming-world/</link><pubDate>Tue, 01 Dec 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/12/01/go-is-the-tesla-of-programming-world/</guid><description>Go技术专栏“改善Go语⾔编程质量的50个有效实践”正在慕课网火热热销中！本专栏主要满足广大gopher关于Go语言进阶的需求，围绕如何写出地道且高质量Go代码给出50条有效实践建议，上线后收到一致好评！78元简直就是白菜价，简直就是白piao! 欢迎大家订阅！ 本文翻译自《GO — The TESLA Of Programming World》 – https://medium.com/glob...</description></item><item><title>一文告诉你如何抢先体验Go泛型</title><link>https://tonybai.com/2020/11/28/httpstonybai-com20201128how-to-experience-go-generics-first/</link><pubDate>Sat, 28 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/28/httpstonybai-com20201128how-to-experience-go-generics-first/</guid><description>本文首发于我主持的“Gopher部落”知识星球，欢迎大家加入星球，一起学习Go语言！年底前8.8折优惠，不要错过哦！ 2020年11月22日，Go核心开发团队技术负责人Russ Cox在golang-dev论坛上确认了Go泛型将在Go 1.18落地(2022.2)： 这对于那些迫切期盼go加入泛型的gopher来说无疑是一个重大利好消息！不过，泛型是把双刃剑！泛型的加入势必会让Go语言的复杂性大幅...</description></item><item><title>一文搞懂Go语言中的切片排序</title><link>https://tonybai.com/2020/11/26/slice-sort-in-go/</link><pubDate>Thu, 26 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/26/slice-sort-in-go/</guid><description>本文首发于“Gopher部落”知识星球！ **切片**是Go语言中引入的用于在大多数场合替代数组的语法元素。切片是长度可变的同类型元素序列，它不支持存储不同类型的元素，当然如果你非用**sl := \[\]interface{}{“hello”, 11, 3.14}**来抬杠^\_^，那就另当别论。 **有序列的地方就有排序的需求**。在各种排序算法都已经成熟的今天，我们完全可以针对特定元素类型的...</description></item><item><title>“Gopher部落”知识星球开球了</title><link>https://tonybai.com/2020/11/22/zssq-gopher-tribe-born/</link><pubDate>Sun, 22 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/22/zssq-gopher-tribe-born/</guid><description>考虑了很久自己要不要开一个知识星球？自己并不擅长社群运营，但 * 自己的技术内容输出档次又是不错的且是持续的，能让一定范围的朋友感觉是有价值的； * 面对大家的问题，相信自己的知识和经验储备也能给出很具参考价值的答案； * 并且这样的一个知识付费的产品还能反过来督促自己输出更多、更有价值的内容，何乐而不为！ 于是鄙人下载了**知识星球**的app，大胆地点击了“创建星球”，**“Gopher部落”...</description></item><item><title>没有VPS搭建govanityurls服务？别急！你依然可以自定义Go包导入路径</title><link>https://tonybai.com/2020/11/15/another-approach-to-customize-package-import-path/</link><pubDate>Sun, 15 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/15/another-approach-to-customize-package-import-path/</guid><description>我们见到的Go包的导入路径常常以github.com、bitbucket.org等代码托管站点的域名为前缀，这样的包导入路径有一个问题，那就是**当Go包的托管站点发生变更时(比如从github.om迁移到bitbucket.org或gitlab.com)，该包的使用者需要更新包的导入路径**。当然，在支持go module+GOPROXY的情况下，如果使用者不再升级包版本，他/她完全可以继续使用...</description></item><item><title>HashiCorp联合创始人：Go是成功且无悔的选择</title><link>https://tonybai.com/2020/11/13/go-is-a-successful-and-zero-regret-choice-for-us-by-hashicorp-founder/</link><pubDate>Fri, 13 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/13/go-is-a-successful-and-zero-regret-choice-for-us-by-hashicorp-founder/</guid><description>提到HashiCorp这个公司，可能很多人都没听说过。但提到vagrant、consul、nomad、terraform或者vault，那么你一定对这些工具或其中之一有所耳闻。这些工具都是HashiCorp这家公司的开源项目。 今年年初，HashiCorp在中国IT圈着实“火”了一把！当时HashiCorp宣布旗下软件禁止在中国区销售，这让很多重度依赖欧美主导的开源软件的国内大厂、小厂、传统IT公...</description></item><item><title>Go，11周年</title><link>https://tonybai.com/2020/11/11/go-opensource-11-years/</link><pubDate>Wed, 11 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/11/go-opensource-11-years/</guid><description>本文翻译自Go官方博客文章《Eleven Years of Go》，原作者：Russ Cox。 今天，我们一起庆祝Go语言正式开业发布11周年。去年的“Go turning 10”周年庆典聚会似乎已成为久远的回忆。这是艰难的一年，但我们一直保持了Go开发的步伐，并积累了很多亮点。 在去年11月，我们在庆祝Go 10周年后不久就发布和上线了go.dev和pkg.go.dev站点。 今年2月，Go 1...</description></item><item><title>通过实例深入理解sync.Map的工作原理</title><link>https://tonybai.com/2020/11/10/understand-sync-map-inside-through-examples/</link><pubDate>Tue, 10 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/10/understand-sync-map-inside-through-examples/</guid><description>&amp;gt; 注：本文首发于笔者的个人微信公众号”iamtonybai”，是公号付费文章(价格1元)。首发于2020.10.9日，经过一个月收费期，我觉得将其免费分享出来。如果你觉得文章质量不错，欢迎到首发地址付费支持：https://mp.weixin.qq.com/s/rsDC-6paC5zN4sepWd5LqQ 近期在项目考虑在内存中保存从数据库加载的配置数据的方案，初步考虑采用map来保存。Go语言...</description></item><item><title>重度使用Go的“后遗症“，你有吗？</title><link>https://tonybai.com/2020/11/05/the-sequela-after-being-used-to-writting-code-in-go/</link><pubDate>Thu, 05 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/05/the-sequela-after-being-used-to-writting-code-in-go/</guid><description>有一种未经证实的说法：**Go诞生于C++程序的漫长构建过程中**。如果C++编译很快，那么Robert Griesemer、Rob Pike和Ken Thompson这三位大佬也没有闲暇时间一起喝着咖啡并决定是时候设计一门新语言了。的确，Go语言诞生后，其简洁的语法、极速地构建、新颖的并发结构、体验优良的工具链以及完成度不低的标准库吸引了很多C/C++程序员转型成为Gopher并开始重度使用Go...</description></item><item><title>系统学习Go语言，有这几本书就够了！</title><link>https://tonybai.com/2020/11/04/the-recommend-books-list-for-learning-go/</link><pubDate>Wed, 04 Nov 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/11/04/the-recommend-books-list-for-learning-go/</guid><description>1\. Go语言的发展现状 如果从2007年9月20日那个下午三个“程序员大佬”在谷歌总部的一间办公室里进行的一次有关设计一门新编程语言的讨论算起，那么Go语言已经度过了自己的13个年头了。 Robert Griesemer、Rob Pike和Ken Thompson 如果从2009年11月10日Go语言正式开源发布算起，Go语言也即将迎来自己的第11个生日。 2020年，Go联合创始人Rob P...</description></item><item><title>Go 1.15中值得关注的几个变化</title><link>https://tonybai.com/2020/10/11/some-changes-in-go-1-15/</link><pubDate>Sun, 11 Oct 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/10/11/some-changes-in-go-1-15/</guid><description>Go 1.15版本在8月12日就正式发布了，给我的感觉就是发布的挺痛快^\_^。这种感觉来自与之前版本发布时间的对比：Go 1.13版本发布于当年的9月4日，更早的Go 1.11版本发布于当年的8月25日。 不过这个时间恰与我家二宝出生和老婆月子时期有重叠，每天照顾孩子团团转的我实在抽不出时间研究Go 1.15的变化:(。如今，我逐渐从照顾二宝的工作中脱离出来^\_^，于是“Go x.xx版本值得...</description></item><item><title>官宣：Go专栏“改善Go语言编程质量的50个有效实践”上线了</title><link>https://tonybai.com/2020/09/08/imooc-go-column-is-available/</link><pubDate>Tue, 08 Sep 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/09/08/imooc-go-column-is-available/</guid><description>断断续续写了一年多的Go专栏：《改善Go语言编程质量的50个有效实践》今天终于正式上线了！- https://www.imooc.com/read/87 慕课专栏：《改善Go语言编程质量的50个有效实践》 Go语言是Google大牛团队(Robert Griesemer、Rob Pike以及Ken Thompson)设计的一种静态类型、编译型编程语言，支持垃圾回收和轻量级并发，它于2009年11月...</description></item><item><title>Google内部是如何使用Go语言的</title><link>https://tonybai.com/2020/08/30/new-case-studies-about-googles-use-of-go/</link><pubDate>Sun, 30 Aug 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/08/30/new-case-studies-about-googles-use-of-go/</guid><description>Go语言始于2007年9月，当时Robert Griesemer，Ken Thompson和我开始讨论设计一种新语言，以解决我们和Google同事在日常工作中面临的工程挑战。我们当时编写的软件通常是一个网络服务器-一个与数百台其他服务器交互的程序-并且在其生命周期内，成千上万的程序员可能会参与编写和维护它。但是我们当时正在使用的语言似乎没有提供正确的工具来解决我们在这种复杂环境中面临的问题。 因此...</description></item><item><title>基于Markdown格式的电子书生成工具大比拼：gohugo、mdbook和peach</title><link>https://tonybai.com/2020/06/27/gohugo-vs-mdbook-vs-peach/</link><pubDate>Sat, 27 Jun 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/06/27/gohugo-vs-mdbook-vs-peach/</guid><description>基于Markdown格式文件写博客已经很多年了，一直使用的是Wordpress的markdown插件，由于各种遗留原因，一直没有转换到直接使用静态站点的方式。博客文章之间一般来说多是独立篇章，少有关联，即便是写一个系列文章，数量也不会太多。因此，用博客形式来组织书籍章节是不大合适的。“术业有专攻”，我们还得寻找专门用来制作电子书的工具或平台，并且要支持本地安装，支持基于Markdown格式的源数据...</description></item><item><title>Go泛型真的要来了！最早在Go 1.17版本支持</title><link>https://tonybai.com/2020/06/18/the-go-generics-is-coming-and-supported-in-go-1-17-at-the-earliest/</link><pubDate>Thu, 18 Jun 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/06/18/the-go-generics-is-coming-and-supported-in-go-1-17-at-the-earliest/</guid><description>Go官博今晨发表了Go核心团队两位大神Ian Lance Taylor和Go语言之父之一的Robert Griesemer撰写的文章“The Next Step for Generics”，该文介绍了Go泛型(Go Generics)的最新进展和未来计划。 2019年中旬，在Go 1.13版本发布前夕的GopherCon 2019大会上，Ian Lance Taylor代表Go核心团队做了有关Go...</description></item><item><title>关于xml包在Unmarshal时将 重写为 的问题</title><link>https://tonybai.com/2020/06/04/the-issue-of-go-xml-package-rewrite-carriage-return/</link><pubDate>Thu, 04 Jun 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/06/04/the-issue-of-go-xml-package-rewrite-carriage-return/</guid><description>今年4月份，中国移动、中国电信、中国联通三大运营商联合举行线上发布会，发布了《5G消息白皮书》。所谓5G消息，即传统短信消息（仅能进行文本展示）的升级版，是由GSMA组织制定的RCS(Rich Communication Suite)消息规范所定义。2019年RCS UP（unified profile)更新到2.4版本，并成为了5G终端标准的一部分，该版本也是第一个具备商用能力的版本，为5G消息...</description></item><item><title>Go语言联合作者Rob Pike专访：Go确实已成为云基础架构的语言</title><link>https://tonybai.com/2020/05/01/rob-pike-interview-go-become-the-language-of-cloud-infrastructure/</link><pubDate>Fri, 01 May 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/05/01/rob-pike-interview-go-become-the-language-of-cloud-infrastructure/</guid><description>&amp;gt; 尽管看到Docker，Kubernetes和用Go编写的云计算的许多其他组件令人欣喜和重要，但也许并不奇怪。Go确实已经成为云基础架构的语言。- Rob Pike，Go编程语言的联合作者 本文翻译自《Rob Pike interview: “Go has indeed become the language of cloud infrastructure”》。 简介 -- 我们与Go编程语言之...</description></item><item><title>后端程序员一定要看的语言大比拼：Java vs. Go vs. Rust</title><link>https://tonybai.com/2020/05/01/comparison-between-java-go-and-rust/</link><pubDate>Fri, 01 May 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/05/01/comparison-between-java-go-and-rust/</guid><description>这是Java，Go和Rust之间的比较。这不是基准测试，更多是对可执行文件大小、内存使用率、CPU使用率、运行时要求等的比较，当然还有一个小的基准测试，可以看到每秒处理的请求数量，我将尝试对这些数字进行有意义的解读。 为了尝试尽可能公平比较，我在此比较中使用每种语言编写了一个Web服务。Web服务非常简单，它提供了三个REST服务端点(endpoint)。 Web服务提供的服务端点 这三个Web服...</description></item><item><title>go protobuf v1败给了gogo protobuf，那v2呢？</title><link>https://tonybai.com/2020/04/24/gogoprotobuf-vs-goprotobuf-v1-and-v2/</link><pubDate>Fri, 24 Apr 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/04/24/gogoprotobuf-vs-goprotobuf-v1-and-v2/</guid><description>近期的一个项目有对结构化数据进行序列化和反序列化的需求，该项目具有**performance critical**属性，因此我们在选择序列化库包时是要考虑包的性能的。 github上有一个有关Go序列化方法性能比较的repo：go\_serialization\_benchmarks，这个repo横向比较了数十种数据序列化方法的正确性、性能、内存分配等，并给出了一个结论：推荐**gogo prot...</description></item><item><title>图解git原理的几个关键概念</title><link>https://tonybai.com/2020/04/07/illustrated-tale-of-git-internal-key-concepts/</link><pubDate>Tue, 07 Apr 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/04/07/illustrated-tale-of-git-internal-key-concepts/</guid><description>git是那个“爱骂人”的Linux之父Linus Torvalds继Linux内核后奉献给全世界程序员的第二个礼物（不能确定已经逐渐老去的Torvalds能否迸发第三春，第三次给我们一个超大惊喜^\_^）。这里再强调一下，git读作**/git/**，而不是**/dʒit/**。 在诞生十余载后(2005年发布第一版)，**git**毫无争议地成为了程序员版本管理工具的首选，它改变了全世界程序员的...</description></item><item><title>Hello，WireGuard</title><link>https://tonybai.com/2020/03/29/hello-wireguard/</link><pubDate>Sun, 29 Mar 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/03/29/hello-wireguard/</guid><description>2020年1月28日，Linux之父Linus Torvalds正式将WireGuard merge到Linux 5.6版本内核主线： 图：WireGuard被加入linux kernel 5.6主线的commit log 这意味着在Linux 5.6内核发布时，linux在内核层面将**原生**支持一个新的VPN协议栈：WireGuard。 图：WireGuard Logo 一. VPN与Wir...</description></item><item><title>图解Go运行时调度器</title><link>https://tonybai.com/2020/03/21/illustrated-tales-of-go-runtime-scheduler/</link><pubDate>Sat, 21 Mar 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/03/21/illustrated-tales-of-go-runtime-scheduler/</guid><description>本文翻译自《Illustrated Tales of Go Runtime Scheduler》。 &amp;gt; 译注：原文章结构有些乱，笔者自行在译文中增加了一些分级标题，让结构显得更清晰一些:)。 多goroutines形式的Go并发是编写现代并发软件的一种非常方便的方法，但是您的Go程序是如何高效地运行这些goroutines的呢？ 在这篇文章中，我们将深入Go运行时底层，从设计角度了解Go运行时调度...</description></item><item><title>使用minio搭建高性能对象存储-第一部分：原型</title><link>https://tonybai.com/2020/03/16/build-high-performance-object-storage-with-minio-part1-prototype/</link><pubDate>Mon, 16 Mar 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/03/16/build-high-performance-object-storage-with-minio-part1-prototype/</guid><description>近期参与了一个项目，该项目有存储大量图片、短视频、音频等非结构化数据的需求。于是我优先在Go社区寻找能满足这类需求的开源项目，minio就这样进入了我的视野。 图：minio logo 其实三年前我就知道了minio，并还下载玩(研)耍(究)了一番，但那时minio的成熟程度与今天相比还是相差较远的(当时需求简单，于是选择了较为熟悉的weedfs)。而如今的minio在github上收获了广泛的关...</description></item><item><title>可视化Go内存管理</title><link>https://tonybai.com/2020/03/10/visualizing-memory-management-in-golang/</link><pubDate>Tue, 10 Mar 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/03/10/visualizing-memory-management-in-golang/</guid><description>本文翻译自《Visualizing memory management in Golang》。 “内存管理”系列的一部分 在这个由多部分组成的系列文章中，我旨在揭示内存管理背后的概念，并对某些现代编程语言的内存管理机制做更深入的探究。我希望该系列文章可以使您对这些语言在内存管理方面正在发生的事情能有所了解。 在本章中，我们将研究Go编程语言（Golang）的内存管理。和C/C++、Rust等一样，...</description></item><item><title>小心go.mod中的go directive</title><link>https://tonybai.com/2020/03/09/take-care-of-the-go-directive-in-go-dot-mod/</link><pubDate>Mon, 09 Mar 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/03/09/take-care-of-the-go-directive-in-go-dot-mod/</guid><description>在撰写《Go 1.14中值得关注的几个变化》这篇文章时，我使用的试验环境为我的2019款 MacPro，OS版本：10.14.6。我通过下载 `https://dl.google.com/go/go1.14.darwin-amd64.tar.gz`并解压的方式安装的Go 1.14版本。在我的工作环境中，我通常通过变更`GOROOT`的方式来使用不同的Go版本。但在进行Go 1.14新增的overl...</description></item><item><title>Go 1.14中值得关注的几个变化</title><link>https://tonybai.com/2020/03/08/some-changes-in-go-1-14/</link><pubDate>Sun, 08 Mar 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/03/08/some-changes-in-go-1-14/</guid><description>可能是得益于2020年2月26日Go 1.14的发布，在2020年3月份的TIOBE编程语言排行榜上，Go重新进入TOP 10，而去年同期Go仅排行在第18位。虽然Go语言以及其他主流语言在榜单上的“上蹿下跳”让这个榜单的权威性饱受质疑:)，但Go在这样的一个时间节点能进入TOP 10，对于Gopher和Go社区来说，总还是一个不错的结果。并且在一定层度上说明：Go在努力耕耘十年后，已经在世界主流...</description></item><item><title>Go语言之禅</title><link>https://tonybai.com/2020/02/24/the-zen-of-go/</link><pubDate>Mon, 24 Feb 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/02/24/the-zen-of-go/</guid><description>本文翻译自Go社区知名Gopher和博主Dave Cheney的文章《The Zen of Go》。 本文来自我在GopherCon Israel 2020上的演讲。文章很长:) 如果您希望阅读精简版，请移步到the-zen-of-go.netlify.com。 &amp;gt; 该演讲视频还未上线。如上线，我会把它更新到本文中的。 我应该如何编写出好代码？ 我最近一直在思考很多事情，每当反思自己的工作成果时，...</description></item><item><title>图解Go内存分配器</title><link>https://tonybai.com/2020/02/20/a-visual-guide-to-golang-memory-allocator-from-ground-up/</link><pubDate>Thu, 20 Feb 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/02/20/a-visual-guide-to-golang-memory-allocator-from-ground-up/</guid><description>本文翻译自《A visual guide to Go Memory Allocator from scratch (Golang)》。 当我刚开始尝试了解Go的内存分配器时，我发现这真是一件可以令人发疯的事情，因为所有事情似乎都像一个神秘的黑盒(让我无从下手)。由于几乎所有技术魔法都隐藏在抽象之下，因此您需要逐一剥离这些抽象层才能理解它们。 在这篇文章中，我们就来这么做(剥离抽象层去了解隐藏在其下...</description></item><item><title>Go modules：最小版本选择</title><link>https://tonybai.com/2019/12/21/go-modules-minimal-version-selection/</link><pubDate>Sat, 21 Dec 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/12/21/go-modules-minimal-version-selection/</guid><description>一. 介绍 ----- 每个依赖管理解决方案都必须解决选择依赖项版本的问题。当前存在的许多版本选择算法都试图识别任何依赖项的“最新最大(latest greatest)”版本。如果您认为语义版本控制(sematic versioning)将被正确应用并且这种社会契约得到遵守，那么这是有道理的。在这样的情况下，依赖项的“最新最大”版本应该是最稳定和安全的版本，并且应与较早版本具有向后兼容性。至少在相...</description></item><item><title>Kubernetes Deployment故障排除图解指南</title><link>https://tonybai.com/2019/12/08/k8s-deployment-troubleshooting/</link><pubDate>Sun, 08 Dec 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/12/08/k8s-deployment-troubleshooting/</guid><description>* * * 下面是一个示意图，可帮助你调试Kubernetes Deployment（你可以在此处下载它的PDF版本）。 当你希望在Kubernetes中部署应用程序时，你通常会定义三个组件： * 一个**Deployment** – 这是一份用于创建你的应用程序的Pod副本的”食谱”； * 一个**Service** – 一个内部负载均衡器，用于将流量路由到内部的Pod上； * 一个**Ingr...</description></item><item><title>计算重现性：一些挑战</title><link>https://tonybai.com/2019/11/19/computational-reproducibility-some-challenges/</link><pubDate>Tue, 19 Nov 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/11/19/computational-reproducibility-some-challenges/</guid><description>&amp;gt; 写在Go语言开源十周年的日子 by Rob Pike 近期，有人对科学结果的可重现性进行了讨论，并得出了一些让人沮丧的结论。一项研究表明：这种可重现性只有62％。 在某些领域，情况可能更糟。任何依赖于计算的结果都面临着其编程环境不断变化的巨大风险：十年前编写的程序如果没有更改，今天构建成功的机会几乎微乎其微，更不用说运行或正确运行了。 这种担忧并不普遍，但正在增长。一个标志就是**十年重现性挑...</description></item><item><title>Go官方发布的go.dev给gopher们带来了什么</title><link>https://tonybai.com/2019/11/14/what-the-godev-website-bring-to-gophers/</link><pubDate>Thu, 14 Nov 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/11/14/what-the-godev-website-bring-to-gophers/</guid><description>众所周知，Go是一个诞生于Google内部的编程语言，它在2009年11月份开源，在开源后立即受到了来自全世界开发人员的关注与贡献。但初期的Go语言的发展依旧是由Go核心团队的若干leader决定的，这种类“民主集中制”的方法延续了若干年。直到Go核心团队逐渐意识到Go应该更多倾听社区的声音，并让更多的gopher参与到Go项目的开发和贡献中来，甚至影响和决定一些语言特定的演化。于是Go团队开始特...</description></item><item><title>Go语言开源十周年</title><link>https://tonybai.com/2019/11/09/go-opensource-10-years/</link><pubDate>Sat, 09 Nov 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/11/09/go-opensource-10-years/</guid><description>本文翻译自Go官方博客上Russ Cox代表Go核心团队发表的“Go Turns 10″一文。 **生日快乐，Go！** 这个周末，我们庆祝Go正式对外发布10周年，即Go作为开源编程语言和构建现代网络软件生态系统的10周年诞辰。 为了纪念这一时刻，Go gopher的创建者Renee French(用下面的新作)描绘了这个令人愉快的场景： 庆祝Go十周年让我回想起2009年11月上旬，那时我们正...</description></item><item><title>Go语言项目的安全评估技术</title><link>https://tonybai.com/2019/11/08/security-assessment-techniques-for-go-projects/</link><pubDate>Fri, 08 Nov 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/11/08/security-assessment-techniques-for-go-projects/</guid><description>在今年夏天我们对Kubernetes的评估成功之后，我们收到了大量Go项目的安全评估需求。为此，我们将在其他编译语言中使用过的安全评估技术和策略调整适配到多个Go项目中。 我们从了解语言的设计开始，识别出开发人员可能无法完全理解语言语义特性的地方。多数这些被误解的语义来自我们向客户报告的调查结果以及对语言本身的独立研究。尽管不是详尽无遗，但其中一些问题领域包括作用域、协程、错误处理和依赖管理。值得...</description></item><item><title>图解中文字符编码-Go语言例解</title><link>https://tonybai.com/2019/11/07/non-ascii-character-encoding-illustrated/</link><pubDate>Thu, 07 Nov 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/11/07/non-ascii-character-encoding-illustrated/</guid><description>今天几个同事在处理一个有关中文字符编码的问题，感觉他们对字符编码这件事依然理解不够透彻。这里用图文方式对中文字符编码做一个简要的解释，例子使用Go语言。 我们知道每个英文字母和数字在计算机中都会对应一个字节，或者说用一个字节来表示，这就是最初的ASCII码。但是随着计算机在全球范围内的广泛使用，非英语国家也要在计算机使用自己的字符，于是出现了字符集“百花齐放”的情况，我国在早期也颁布了自己的中文字...</description></item><item><title>Go语言的遗产</title><link>https://tonybai.com/2019/11/04/the-legacy-of-go/</link><pubDate>Mon, 04 Nov 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/11/04/the-legacy-of-go/</guid><description>本文是gohugo作者Steve Francia在意大利佛罗伦萨举办的GoLab上分享的闭幕演讲讲稿的文字版，该演讲的主题为”Go的遗产”。该演讲讨论了Go语言继承的遗产，以及它是如何尊重这些遗产的，并在最后总结了Go希望留给后来者的遗产。 **演讲胶片** &amp;gt; 我们有责任保留好留给我们的遗产，并留下值得我们子孙后代继承的遗产 – 克里斯汀·格雷格（Christine Gregoire） 1\. ...</description></item><item><title>Go 1.13中值得关注的几个变化</title><link>https://tonybai.com/2019/10/27/some-changes-in-go-1-13/</link><pubDate>Sun, 27 Oct 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/10/27/some-changes-in-go-1-13/</guid><description>2019年对于Go语言来说也是一个重要的年份，因为在2019年的11月10日，Go即将迎来其开源10周年的纪念日。在这个重要日子的前夕，在GopherCon 2019大会后，Go项目组在2019.9.4日发布了Go 1.13版本。 这是自2017年GopherCon大会上Russ Cox做“Toward Go 2″主题演讲以来Go项目发布的第四个版本（前三个分别是：go 1.10、go 1.11和...</description></item><item><title>如何在Ubuntu 18.04 Server上部署Kubernetes集群</title><link>https://tonybai.com/2019/10/21/how-to-deploy-a-kubernetes-cluster-with-ubuntu-server-18-04/</link><pubDate>Mon, 21 Oct 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/10/21/how-to-deploy-a-kubernetes-cluster-with-ubuntu-server-18-04/</guid><description>如今，你几乎不可避免地会听到来自Kubernetes的发声，你更没有充分的理由拒绝去听。 一旦一切就绪，这个强大的容器编排工具将以您难以想象的敏捷性来扩展您的操作。 为了实际使用Kubernetes进行部署和管理容器，您首先必须创建Kubernetes服务器集群。 一旦集群建立后，您就能够部署，扩展和管理您的容器化应用程序了。 在Ubuntu Server 18.04的帮助下，我将引导您完成此过程...</description></item><item><title>Go 1.13中的错误处理</title><link>https://tonybai.com/2019/10/18/errors-handling-in-go-1-13/</link><pubDate>Fri, 18 Oct 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/10/18/errors-handling-in-go-1-13/</guid><description>介绍 -- 在过去的十年中， Go的errors are values的理念在编码实践中运行得也很良好。尽管标准库对错误处理的的支持很少（只有errors.New和fmt.Errorf函数可以用来构造仅包含字符串消息的错误），但是内置的error接口使Go程序员可以添加所需的任何信息。它所需要的只是一个实现Error方法的类型： type QueryError struct { Query str...</description></item><item><title>Uber Go语言编码规范</title><link>https://tonybai.com/2019/10/12/uber-go-style-guide/</link><pubDate>Sat, 12 Oct 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/10/12/uber-go-style-guide/</guid><description>Uber是世界领先的生活出行服务提供商，也是Go语言的早期adopter，根据Uber工程博客的内容，大致可以判断出Go语言在Uber内部扮演了十分重要的角色。Uber内部的Go语言工程实践也是硕果累累，有大量Go实现的内部工具被Uber开源到github上，诸如被Gopher圈熟知的zap、jaeger等。2018年年末Uber将内部的Go风格规范开源到github，经过一年的积累和更新，该规范...</description></item><item><title>在Kubernetes上如何基于自定义指标实现应用的自动缩放</title><link>https://tonybai.com/2019/10/11/autoscaling-apps-on-kubernetes/</link><pubDate>Fri, 11 Oct 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/10/11/autoscaling-apps-on-kubernetes/</guid><description>如何在Kubernetes上实现应用缩放？ --------------------- 使用静态配置将应用程序部署到生产环境并不是最佳选择。 流量模式可能会快速变化，应用程序应该能够实现自适应： * 当需求增加时，应用程序应扩大规模（增加副本数）以保持响应速度。 * 当需求减少时，应用程序应缩小规模（减少副本数量），以免浪费资源。 Kubernetes以Horizontal Pod Autosca...</description></item><item><title>如何在Go语言中使用Websockets：最佳工具与行动指南</title><link>https://tonybai.com/2019/09/28/how-to-build-websockets-in-go/</link><pubDate>Sat, 28 Sep 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/09/28/how-to-build-websockets-in-go/</guid><description>如今，在不刷新页面的情况下发送消息并获得即时响应在我们看来是理所当然的事情。但是曾几何时，启用实时功能对开发人员来说是一个真正的挑战。开发社区在HTTP长轮询(http long polling)和AJAX上走了很长一段路，但终于还是找到了一种构建真正的实时应用程序的解决方案。 该解决方案以WebSockets的形式出现，这使得在用户浏览器和服务器之间开启一个交互式会话成为可能。WebSocket...</description></item><item><title>Go语言包管理简史</title><link>https://tonybai.com/2019/09/21/brief-history-of-go-package-management/</link><pubDate>Sat, 21 Sep 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/09/21/brief-history-of-go-package-management/</guid><description>包管理是Go一直被诟病做得不好的功能之一。先前版本（go 1.11之前）的主要缺点之一是go get是缺乏对依赖包版本的管理和对可复制构建(reproducible build)的支持。Go社区已经开发了一些包管理器和工具作为版本化包依赖的事实标准解决方案，如glide，dep以及一些辅助工具等。 &amp;gt; “我在生产构建中使用go get。” – 没有人这么说过。 Go语言的包管理实现可追溯到Goog...</description></item><item><title>Go语言回顾：从Go 1.0到Go 1.13</title><link>https://tonybai.com/2019/09/07/go-retrospective/</link><pubDate>Sat, 07 Sep 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/09/07/go-retrospective/</guid><description>Go 1.13版本在2019.9.3正式发布！国外的Gopher Vincent Blanchon发表了一篇文章《Go: Retrospective》(科学上网阅读)，对Go从1.0版本到1.13版本做了简要的回顾，这里是那篇文章的译文。 对于每一位Go开发者来说，Go语言的演化历程是必须要知道的事情。了解这些横跨年份发布的大版本的主要变化将有助于Gopher理解Go语言的发展理念以及该语言每个版...</description></item><item><title>构建Kubernetes集群 – 选择工作节点大小</title><link>https://tonybai.com/2019/09/05/kubernetes-node-size/</link><pubDate>Thu, 05 Sep 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/09/05/kubernetes-node-size/</guid><description>&amp;gt; 近期learnk8s网站上发布了一些关于k8s的好文章，这里搬运并翻译了一些，供大家参考。 本文翻译自《Architecting Kubernetes clusters — choosing a worker node size》。 **当您创建Kubernetes集群时，冒出的第一个问题之一是：“我应该使用哪种类型的工作节点以及需要多少个这样的节点”。** 如果您正在构建在内部部署的k8s集...</description></item><item><title>提高您的kubectl生产力（第三部分）：集群上下文切换、使用别名减少输入和插件扩展</title><link>https://tonybai.com/2019/08/31/kubectl-productivity-part3/</link><pubDate>Sat, 31 Aug 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/08/31/kubectl-productivity-part3/</guid><description>本文翻译自《Boosting your kubectl productivity》。 第一部分：什么是kubectl？ 第二部分：命令完成、资源规范快速查看和自定义列输出格式什么是kubectl？ 4\. 轻松切换集群和名称空间 --------------- 当kubectl必须向Kubernetes API发出请求时，它会读取系统上所谓的kubeconfig文件，以获取它需要访问的所有连接参数...</description></item><item><title>提高您的kubectl生产力（第二部分）：命令完成、资源规范快速查看和自定义列输出格式</title><link>https://tonybai.com/2019/08/30/kubectl-productivity-part2/</link><pubDate>Fri, 30 Aug 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/08/30/kubectl-productivity-part2/</guid><description>本文翻译自《Boosting your kubectl productivity》。 第一部分：什么是kubectl？ 1\. 通过命令完成(command completion)减少输入 ---------------------------------- 命令完成是提高你的kubectl生产力的最有用但经常被忽视的技巧之一。 命令完成允许您使用Tab键自动完成kubectl命令的各个部分。这适...</description></item><item><title>提高您的kubectl生产力（第一部分）：什么是kubectl</title><link>https://tonybai.com/2019/08/29/kubectl-productivity-part1/</link><pubDate>Thu, 29 Aug 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/08/29/kubectl-productivity-part1/</guid><description>本文翻译自《Boosting your kubectl productivity》。 如果您使用Kubernetes，那么kubectl可能是您最常用的工具之一。每当您花费大量时间使用某种特定工具时，值得深入了解并了解如何有效地使用它。 本文包含一系列提示和技巧，使您对kubectl的使用更加高效和有效。同时，它旨在加深您对Kubernetes各方面工作的理解。 本文的目标是让您在Kubernet...</description></item><item><title>增值类业务短信收发协议介绍</title><link>https://tonybai.com/2019/08/21/introduction-on-tech-protocol-of-transfering-value-added-sms/</link><pubDate>Wed, 21 Aug 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/08/21/introduction-on-tech-protocol-of-transfering-value-added-sms/</guid><description>在上一篇《增值类短信业务图文简介》中，我们介绍了什么是增值类短信业务以及增值类短信的收发流程。在这篇中我们将进一步深入介绍增值类短信收发协议的相关内容，不过重点放在短信内容编码对短信呈现的影响。 从近两年大火的5G我们可以看到，在移动通信领域**规范和标准先行**。虽然第一条短信在1992年在实验室就被发了出来，但是这离真正的短信商用还有很长一段距离。之后作为GSM(Global System f...</description></item><item><title>增值类短信业务图文简介</title><link>https://tonybai.com/2019/08/20/introduction-to-value-added-sms-in-graphic-form/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/08/20/introduction-to-value-added-sms-in-graphic-form/</guid><description>以前一提到短信（Short Message），人们会想到“拇指族（在社交移动APP诞生前，专指用手机高频发短信的一个群体）”、“拜年短信”。现在再提到短信，人们想到的变成了“验证码”、“垃圾短信”以及“我好久不发短信了”。短信这一信息承载的媒介是伴随着移动通信工具一并诞生的，它是**“古老的”** – 1992年，22岁的加大拿工程师Neil Papworth用电脑给同事Richard Jarvi...</description></item><item><title>图解3GPP规范文档组织结构与编号规则</title><link>https://tonybai.com/2019/07/25/illustrate-3gpp-spec-docs-structure-and-numbering/</link><pubDate>Thu, 25 Jul 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/07/25/illustrate-3gpp-spec-docs-structure-and-numbering/</guid><description>3GPP组织（3rd Generation Partnership Project）是全球移动通信业标准制定之执牛耳者。其最初的工作范围是为第三代移动通信系统制定全球适用的技术规范(TS，Technical Specification)和技术报告(TR，Technical Report)，确保不同厂商之间实现无缝互操作以及为移动通信提供其所必需的全球规模，从而达成实现GSM由2G网络到3G网络的平...</description></item><item><title>使用git操作svn仓库</title><link>https://tonybai.com/2019/06/25/using-git-with-svn-repo/</link><pubDate>Tue, 25 Jun 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/06/25/using-git-with-svn-repo/</guid><description>如今，虽然Git已经大行其道，但是仍有很多IT公司和组织依旧在使用集中式的版本控制系统subversion，尤其是一些传统软件公司，他们倾向于集中式的联网开发。如果你是一个Git fans，并且你要是遇到代码仓库依旧是使用subversion进行版本控制的情况，你又该如何施展呢？ 其实git很早就支持与subversion repo的互操作了，2011年我就曾写过一篇《小试git-svn》的博文，...</description></item><item><title>Go module机制下升级major版本号的实践</title><link>https://tonybai.com/2019/06/03/the-practice-of-upgrading-major-version-under-go-module/</link><pubDate>Mon, 03 Jun 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/06/03/the-practice-of-upgrading-major-version-under-go-module/</guid><description>Go module机制在Go 1.11版本引入，虽然也伴随着不小的质疑声，但总体上Go社区多数Gopher是接受go module的，很多标杆式的Go项目(比如kubernetes、kubernetes client-go等)也都逐渐转向了Go module，并且Gopher也在向core team反馈了自己的建议和问题。Go core team也在go module最初设计的基础上持续进行着改进...</description></item><item><title>Go正走在成为下一个企业级编程语言的轨道上</title><link>https://tonybai.com/2019/05/03/go-is-on-a-trajectory-to-become-the-next-enterprise-programming-language/</link><pubDate>Fri, 03 May 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/05/03/go-is-on-a-trajectory-to-become-the-next-enterprise-programming-language/</guid><description>发展演化了十年的Go语言已经被证明了是云计算时代的首选编程语言，但Go的用武之地显然不局限于此。Kevin Goslar近期在Hacker Noon发表了一篇名为：《Go is on a Trajectory to Become the Next Enterprise Programming Language》的文章，阐述了Go可能成为下一个企业编程语言的理由，这里是那篇文章的中文译文，分享给大家...</description></item><item><title>使用nomad在weave网络中部署工作负载</title><link>https://tonybai.com/2019/04/20/deploy-workload-in-weave-network-using-nomad/</link><pubDate>Sat, 20 Apr 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/04/20/deploy-workload-in-weave-network-using-nomad/</guid><description>当初Kubernetes网络的设计目标是**使得开发者使用pod时在网络这一层面可以像使用传统物理主机或虚拟机一样**。具体的基本要求如下： * 所有pod间均应可以在无需NAT的情况下直接通信； * 所有集群节点与所有集群的Pod之间均应可以在无需NAT的情况下直接通信； * 容器自身的地址和其他pod看到的它的地址是同一个地址； 按照这样的要求，集群中的每个pod都在一个平坦的、共享网络命名空...</description></item><item><title>Kubernetes网络插件（CNI）基准测试的最新结果</title><link>https://tonybai.com/2019/04/18/benchmark-result-of-k8s-network-plugin-cni/</link><pubDate>Thu, 18 Apr 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/04/18/benchmark-result-of-k8s-network-plugin-cni/</guid><description>本文翻译自Alexis Ducastel的文章《Benchmark results of Kubernetes network plugins (CNI) over 10Gbit/s network (Updated: April 2019)》。 本文是我之前的基准测试的最新更新，这次测试在最新版Kubernetes 1.14上运行，其中CNI版本在2019年4月更新。 首先，非常感谢Cilium...</description></item><item><title>使用nomad实现工作负载版本升级</title><link>https://tonybai.com/2019/04/09/upgrade-workload-using-nomad/</link><pubDate>Tue, 09 Apr 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/04/09/upgrade-workload-using-nomad/</guid><description>书接上文。 在《使用nomad实现集群管理和微服务部署调度》一文中，我们介绍了使用nomad进行集群管理和工作负载调度的轻量级方案（相较于Kubernetes方案）。在本文中，我们继续对方案进行延展，介绍一下在nomad集群中工作负载版本升级的一些常用模式和实现方法，包括滚动升级、蓝绿部署和金丝雀部署。 一. 初始状态 ------- 这里我们利用基于tcp+sni路由(listener端口为99...</description></item><item><title>记一次go panic问题的解决过程</title><link>https://tonybai.com/2019/04/04/notes-about-fixing-a-go-panic-problem/</link><pubDate>Thu, 04 Apr 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/04/04/notes-about-fixing-a-go-panic-problem/</guid><description>一. Panic问题概述 ------------ 本周收到客户在bugclose上填写的一个issue：添加一个下发通道后，pushd程序panic并退出了！程序panic时输出的stacktrace信息摘录如下： panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: se...</description></item><item><title>使用nomad实现集群管理和微服务部署调度</title><link>https://tonybai.com/2019/03/30/cluster-management-and-microservice-deployment-and-scheduled-by-nomad/</link><pubDate>Sat, 30 Mar 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/03/30/cluster-management-and-microservice-deployment-and-scheduled-by-nomad/</guid><description>在“云原生”、“容器化”、“微服务”、“服务网格”等概念大行其道的今天，一提到集群管理、容器工作负载调度，人们首先想到的是Kubernetes。 Kubernetes经过多年的发展，目前已经成为了云原生计算平台的事实标准，得到了诸如谷歌、微软、红帽、亚马逊、IBM、阿里等大厂的大力支持，各大云计算提供商也都提供了专属Kubernetes集群服务。开发人员可以**一键**在这些大厂的云上创建k8s集...</description></item><item><title>Go 1.12中值得关注的几个变化</title><link>https://tonybai.com/2019/03/02/some-changes-in-go-1-12/</link><pubDate>Sat, 02 Mar 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/03/02/some-changes-in-go-1-12/</guid><description>Go team如期在2月末发布了Go 1.12版本。从Go 1.12的Release Notes粗略来看，这个版本相较于之前增加了go modules机制、WebAssembly支持的Go 1.11，变化略“小”。这也给下一个Go 1.13版本预留了足够的“惊喜”空间:)。从目前的plan来看，Go 1.13很可能落地的包括：Go2的几个proposals：Go 2 number literals...</description></item><item><title>YAML入门：以创建一个Kubernetes deployment为例</title><link>https://tonybai.com/2019/02/25/introduction-to-yaml-creating-a-kubernetes-deployment/</link><pubDate>Mon, 25 Feb 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/02/25/introduction-to-yaml-creating-a-kubernetes-deployment/</guid><description>YAML语言似乎已经成为了事实标准的“云配置”语言，无论是容器事实标准docker(主要是docker-compose使用)、SDN，还是容器编排王者kubernetes，又或是虚拟机时代的王者openstack采用的配置文件都是yaml文件格式。不过需要承认的是我个人最初刚接触yaml时还不是很适应（个人更适应json），在后续运维kubernetes时，每每都要去参考k8s doc中的各种k8...</description></item><item><title>Go2 Error Inspection前瞻</title><link>https://tonybai.com/2019/01/27/perspective-study-on-go2-error-inspection/</link><pubDate>Sun, 27 Jan 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/01/27/perspective-study-on-go2-error-inspection/</guid><description>这几年关于Go语言未来演化的讨论成为了Gopher世界的热点，Go team官方对于Go语言的演化(以Go2为标签)也是十分上心，但吸取了其他语言，比如：Python3割裂社区的、不兼容演化的教训，Go team最终选择了一条尽可能地兼容Go1、稳健、平滑的演化之路，并逐渐开始落地。Go 1.11的Go modules是Go team开启**Go2**演化进程的标志性事件。随着“Go 2 Draf...</description></item><item><title>Go与SOAP</title><link>https://tonybai.com/2019/01/08/go-and-soap/</link><pubDate>Tue, 08 Jan 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/01/08/go-and-soap/</guid><description>在REST和RPC大行其道的今天，支持SOAP（简答对象访问协议）作为Web服务消息交换协议的情况是越来越少了。但在一些遗留系统中，尤其是采用微软技术栈的服务系统中，SOAP依然占有一席之地，比如在一些医院院内的IT系统中。 Go语言诞生后，主流的Web Service设计已经开始过渡到REST和RPC，Go相关开源项目也以对REST和RPC的支持为主。而对SOAP的支持则少而零散，社区里也没有对...</description></item><item><title>Hello，Go module proxy</title><link>https://tonybai.com/2018/11/26/hello-go-module-proxy/</link><pubDate>Mon, 26 Nov 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/11/26/hello-go-module-proxy/</guid><description>一. Go module引入的幸福与“无奈” ---------------------- 在《Go 1.11中值得关注的几个变化》一文中，我们知道了Go语言通过引入module的概念进而引入了Go tool的另外一种工作模式module-aware mode。在新的工作模式下，Go module支持了Versioned Go，并初步解决了包依赖管理的问题。 对于全世界绝大多数Gophers来说，...</description></item><item><title>Go 1.11中值得关注的几个变化</title><link>https://tonybai.com/2018/11/19/some-changes-in-go-1-11/</link><pubDate>Mon, 19 Nov 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/11/19/some-changes-in-go-1-11/</guid><description>转眼间又近年底，距8月25日Go 1.11版本正式发布已过去快三个月了。由于种种原因，Go语言发布变化系列的Go 1.11版本没能及时放出。近期网课发布上线后，个人时间压力稍缓和。又恰看到近期Go 1.12 release note的initial version已经加入到master，于是这篇文章便上升到个人Todo list的Top3的位置，我也尽一切可能的碎片时间收集素材，撰写文章内容。这个...</description></item><item><title>Go，9周年</title><link>https://tonybai.com/2018/11/12/go-opensource-9-years/</link><pubDate>Mon, 12 Nov 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/11/12/go-opensource-9-years/</guid><description>本文翻译自Go官方博客：《Nine years of Go》。 介绍 今天是我们的Go语言初始版本开源的第九个周年纪念日。在每个周年纪念日上，我们都希望花些时间思考过去一年发生的事情。过去12个月对Go语言和Go社区来说是突破性的一年。 对Go的爱和接纳 感谢你们所有人，2018年对Go来说是美好的一年！在多个行业调查中，Gopher们表达了他们使用Go的快乐程度，并且许多非Go开发者也表示了他们...</description></item><item><title>官宣：慕课网课程“Kubernetes实战：高可用集群搭建、配置、运维与应用”上线了</title><link>https://tonybai.com/2018/10/17/imooc-course-kubernetes-practice-go-online/</link><pubDate>Wed, 17 Oct 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/10/17/imooc-course-kubernetes-practice-go-online/</guid><description>距离我的第一门网课《Kubernetes基础：开启云原生之门》上线已经过去5个多月了，我的实战课《Kubernetes实战：高可用集群搭建、配置、运维与应用》终于在9月27日正式上线了。 一. 课程介绍 《Kubernetes实战：高可用集群搭建、配置、运维与应用》的课程内容与最初课程设计时规划的内容大纲没有太多出入，基本就是根据我最初的想法拟定的内容，**这也基本是我这两年学习k8s、积累的k8...</description></item><item><title>基于consul实现微服务的服务发现和负载均衡</title><link>https://tonybai.com/2018/09/10/setup-service-discovery-and-load-balance-based-on-consul/</link><pubDate>Mon, 10 Sep 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/09/10/setup-service-discovery-and-load-balance-based-on-consul/</guid><description>一. 背景 ----- 随着2018年年初国务院办公厅联合多个部委共同发布了《国务院办公厅关于促进“互联网+医疗健康”发展的意见(国办发〔2018〕26号)》，国内医疗IT领域又迎来了一波互联网医院建设的高潮。不过互联网医院多基于实体医院建设，虽说挂了一个“互联网”的名号，但互联网医院系统也多与传统的院内系统，比如：HIS、LIS、PACS、EMR等共享院内的IT基础设施。 如果你略微了解过国内医...</description></item><item><title>初窥Go module</title><link>https://tonybai.com/2018/07/15/hello-go-module/</link><pubDate>Sun, 15 Jul 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/07/15/hello-go-module/</guid><description>自2007年“三巨头（Robert Griesemer, Rob Pike, Ken Thompson）”提出设计和实现Go语言以来，Go语言已经发展和演化了十余年了。这十余年来，Go取得了巨大的成就，先后在2009年和2016年当选TIOBE年度最佳编程语言，并在全世界范围内拥有数量庞大的拥趸。不过和其他主流编程语言一样，Go语言也不是完美的，不能满足所有开发者的“口味”。这些年来Go在“包依赖...</description></item><item><title>HTTPS服务的Kubernetes ingress配置实践</title><link>https://tonybai.com/2018/06/25/the-kubernetes-ingress-practice-for-https-service/</link><pubDate>Mon, 25 Jun 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/06/25/the-kubernetes-ingress-practice-for-https-service/</guid><description>在公有云被广泛接纳的今天，数据传输安全问题日益凸显，因为在公有云提供商的经典网络（二层互通）中，即便是内部网络通信也要考虑网络嗅探等hack手段，这也是公有云主推所谓“专用网络（二层隔离）”的原因之一。从应用的角度，我们应该尽量通过技术手段保证数据通信的安全性。而目前最常用的方式就是基于SSL/TLS的安全通信方式了，在七层，对应的就是https了。 这样，下面的仅在负载均衡/反向代理入口做加密通...</description></item><item><title>实践kubernetes ingress controller的四个例子</title><link>https://tonybai.com/2018/06/21/kubernetes-ingress-controller-practice-using-four-examples/</link><pubDate>Thu, 21 Jun 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/06/21/kubernetes-ingress-controller-practice-using-four-examples/</guid><description>我之前并未使用过标准的Kubernetes ingress，而是自己实现了一个基于nginx的、类似ingress controller的服务入口管理程序nginx-kit。这个程序会部署到Kubernetes集群中，以Pod形式运行。该Pod由两个Container组成，一个Container放置了一个由脚本启动的nginx；另外一个Container中放置的是一个conf generator程...</description></item><item><title>使用kubectl访问Kubernetes集群时的身份验证和授权</title><link>https://tonybai.com/2018/06/14/the-authentication-and-authorization-of-kubectl-when-accessing-k8s-cluster/</link><pubDate>Thu, 14 Jun 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/06/14/the-authentication-and-authorization-of-kubectl-when-accessing-k8s-cluster/</guid><description>kubectl是日常访问和管理Kubernetes集群最为常用的工具。 当我们使用kubeadm成功引导启动(init)一个Kubernetes集群的控制平面后，kubeadm会在init的输出结果中给予我们下面这样的“指示”： ... ... Your Kubernetes master has initialized successfully! To start using your clus...</description></item><item><title>在Kubernetes 1.10.3上以Hard模式搭建EFK日志分析平台</title><link>https://tonybai.com/2018/06/13/setup-efk-on-kubernetes-1-10-3-in-the-hard-way/</link><pubDate>Wed, 13 Jun 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/06/13/setup-efk-on-kubernetes-1-10-3-in-the-hard-way/</guid><description>在一年多之前，我曾写过一篇文章《使用Fluentd和ElasticSearch Stack实现Kubernetes的集群Logging》，文中讲解了如何在Kubernetes上利用EFK（elastic, fluentd, kibana）搭建一套可用的集中日志分析平台。当时的k8s使用的是1.3.7版本，创建EFK使用的是kubernetes项目中**cluster/addons/fluentd-...</description></item><item><title>对一段有关Go Code Block和变量作用域的代码的简要分析</title><link>https://tonybai.com/2018/05/11/the-analysis-of-a-go-code-snippet-about-code-blocks-and-scope/</link><pubDate>Fri, 11 May 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/05/11/the-analysis-of-a-go-code-snippet-about-code-blocks-and-scope/</guid><description>近期，Go team的David CrawShaw在twitter上贴出了一段代码，如下： func main() { if a := 1; false { } else if b := 2; false { } else if c := 3; false { } else { println(a, b, c) } } David CrawShaw想表达的意图是gopher们很少在”else if...</description></item><item><title>慕课网免费课“Kubernetes：开启云原生之门”上线</title><link>https://tonybai.com/2018/05/02/imooc-course-kubernetes-open-the-gate-to-cloudnative-go-online/</link><pubDate>Wed, 02 May 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/05/02/imooc-course-kubernetes-open-the-gate-to-cloudnative-go-online/</guid><description>这两年一直在做一个基于Kubernetes的、用于互联网产品运营支撑的类PaaS平台，因此一直把自己定位为一个Kubernetes实践者：以Kubernetes为中心进行集群搭建、运维、k8s相关技术的理解与应用、k8s新技术的追踪和尝试落地等。不过就Kubernetes的深入程度来说，感觉自己和那些天天与k8s打交道的大厂专家或以容器云为卖点的技术专家还是有差距的。但是大厂专家每周996，闲暇时...</description></item><item><title>写Go代码时遇到的那些问题[第3期]</title><link>https://tonybai.com/2018/04/06/the-problems-i-encountered-when-writing-go-code-issue-3rd/</link><pubDate>Fri, 06 Apr 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/04/06/the-problems-i-encountered-when-writing-go-code-issue-3rd/</guid><description>我有一个习惯，那就是随时记录下编程过程中遇到的问题（包括问题现场、问题起因以及对问题的分析），并喜欢阶段性的对一段时间内的**编码过程的得与失**进行回顾和总结。内容可以包括：对编程语法的新认知、遇坑填坑的经历、一些让自己豁然开朗的小tip/小实践等。记录和总结的多了，感觉有价值的，就成文发在博客上的；一些小的点，或是还没有想清楚的事情，或思路没法结构化统一的，就放在资料库里备用。“写Go代码时遇...</description></item><item><title>defer函数参数求值简要分析</title><link>https://tonybai.com/2018/03/23/the-analysis-of-the-param-evaluation-of-defer-functions/</link><pubDate>Fri, 23 Mar 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/03/23/the-analysis-of-the-param-evaluation-of-defer-functions/</guid><description>一. 引子 书接上文，在发表了《对一段Go语言代码输出结果的简要分析》一文之后，原问题提出者又有了新问题，这是一个典型Gopher学习Go的历程，想必很多Gopher们，包括我自己都遇到过的。我们先来看看这段代码(来自原问题提出者)： // https://play.golang.org/p/dOUFNj96EIQ package main import &amp;#34;fmt&amp;#34; func main() { v...</description></item><item><title>对一段Go语言代码输出结果的简要分析</title><link>https://tonybai.com/2018/03/20/the-analysis-of-output-results-of-a-go-code-snippet/</link><pubDate>Tue, 20 Mar 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/03/20/the-analysis-of-output-results-of-a-go-code-snippet/</guid><description>年后事情实在是多，各种被催进度，于是好长一段时间未更博客了，自责中….。今天蹦出来热热身^0^！ 中午在微博私信中看到一封来自某Gopher的咨询，他贴了一段代码，并表示对代码的输出结果的不解，希望我能帮他分析一下。他的代码如下： //testslicerange.go package main import ( &amp;#34;fmt&amp;#34; &amp;#34;time&amp;#34; ) type field struct { name st...</description></item><item><title>TB一周萃选[第10期]</title><link>https://tonybai.com/2018/03/03/10th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sat, 03 Mar 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/03/03/10th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第10期\]”**的归档。 &amp;gt; 这个世界上最危险的毒药，就是成就感。而解药就是每晚都想一想，明天如何做得更好。 – 英格瓦坎普拉德，宜家创始人 2018年元宵节已过，这个传统意义上的年就算真的过完了，我们的那颗有些闲散、有些懈怠的心需要收一收，是时候为2018年的“事业”做些规划，从2018的起跑线上起跑出去了。就连现在的孩子，在开学第一课时都...</description></item><item><title>Go 1.10中值得关注的几个变化</title><link>https://tonybai.com/2018/02/17/some-changes-in-go-1-10/</link><pubDate>Sat, 17 Feb 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/02/17/some-changes-in-go-1-10/</guid><description>又到了Go语言新版本的发布时间窗口了！这次的主角是Go 1.10。 曾几何时， 这是很多Gopher在Go 1.8、Go 1.9时猜测是否存在的那个版本，毕竟minor version即将进化到两位数。从Go语言第一封设计mail发出到现在的十年间，尤其是Go语言经历了近几年的爆发式增长，基本奠定了云原生第一语言的位置之后，人们对Go语言有了更多新的、更为深刻的认知，同时对这门编程语言也有了更多的...</description></item><item><title>TB一周萃选[第9期]</title><link>https://tonybai.com/2018/02/11/9th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sun, 11 Feb 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/02/11/9th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第9期\]”**的归档。 &amp;gt; 亲情犹如一江剪不断的春水，流动的是游子心中永远的思念；亲情犹如一丘数不尽的细沙，沉淀的是长年堆积的牵挂；亲情犹如夜空中那颗北斗，指引的是那迷路的羔羊回家的方向。忙碌了一年，该回家了，给心放个假，带上媳妇带上你的娃，回家看看那年迈的爸妈，出发！ — 改编自网络 此时此刻，很多人刚刚踏上了春节回家的旅途，有些人更是已经...</description></item><item><title>TB一周萃选[第8期]</title><link>https://tonybai.com/2018/02/03/8th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sat, 03 Feb 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/02/03/8th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第8期\]”**的归档。 &amp;gt; 再看看那个光点，它就在这里。那是我们的家园，我们的一切。你所爱的每一个人，你认识的每一个人，你听说过的每一个人，曾经有过的每一个人，都在它上面度过他们的一生。我们的欢乐与痛苦聚集在一起，数以千计的自以为是的宗教、意识形态和经济学说，所有的猎人与强盗、英雄与懦夫、文明的缔造者与毁灭者、国王与农夫、年轻的情侣、母亲与父...</description></item><item><title>TB一周萃选[第7期]</title><link>https://tonybai.com/2018/01/28/7th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sun, 28 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/28/7th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第7期\]”**的归档。 &amp;gt; 我看过小马哥(哈维尔·马斯切拉诺)踢球， &amp;gt; 你看过小马哥踢球， &amp;gt; 他看过小马哥踢球。 &amp;gt; 我们看过小马哥踢球， &amp;gt; 你们看过小马哥踢球， &amp;gt; 他们看过小马哥踢球！ &amp;gt; &amp;gt; — 改编自网络资料 都说三九天是一年中最冷的一段时间，但我们这里稍有偏差，就个人赶脚：四九、五九才是我们这里温度的最低点。这一周的感受用一句...</description></item><item><title>写Go代码时遇到的那些问题[第2期]</title><link>https://tonybai.com/2018/01/27/the-problems-i-encountered-when-writing-go-code-issue-2nd/</link><pubDate>Sat, 27 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/27/the-problems-i-encountered-when-writing-go-code-issue-2nd/</guid><description>第1期的“写Go代码时遇到的那些问题”一经发布后得到了很多Gopher的支持和赞赏，这也是我继续写下去的动力！不过这里依然要强调的是这一系列文章反映的是笔者在实践中对代码编写的认知以及代码的演化过程。这里的代码也许只是“中间阶段”，并不是什么最优的结果，我记录的只是对问题、对代码的一个思考历程。不过，十分欢迎交流与批评指正。 一、dep的日常操作 ---------- 虽然dep在国内使用依然有i...</description></item><item><title>TB一周萃选[第6期]</title><link>https://tonybai.com/2018/01/20/6th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sat, 20 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/20/6th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第6期\]”**的归档。 图：第6期封面 &amp;gt; 凡事欲其成功，必须付出代价——奋斗。 &amp;gt; — 美国作家 爱默生 每期挑选“封面图”都是一件颇为“费工夫”的事情，本期的封面图来自于一个投资界大V发送的微博内容，因为当我第一眼看到这幅图片时，感觉它**颇为契合我当时的心境**。 **“未来的一年里，连睡觉都是浪费时间”**这句话的最原始的出处在哪里我...</description></item><item><title>TB一周萃选[第5期]</title><link>https://tonybai.com/2018/01/14/5th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sun, 14 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/14/5th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第5期\]”**的归档。 &amp;gt; 人生十鉴 &amp;gt; &amp;gt; 大喜易失言 &amp;gt; 大怒易失礼 &amp;gt; 大惊易失态 &amp;gt; 大哀易失颜 &amp;gt; 大乐易失察 &amp;gt; 大惧易失节 &amp;gt; 大思易失爱 &amp;gt; 大醉易失德 &amp;gt; 大话易失信 &amp;gt; 大欲易失命 下雪，是北方城市冬天的“常规操作”，是最不需要被单独关注的的事情。但今年冬天的“雪”却成为了这边的热门话题，原因：**自从入冬以来一直就没下一...</description></item><item><title>写Go代码时遇到的那些问题[第1期]</title><link>https://tonybai.com/2018/01/13/the-problems-i-encountered-when-writing-go-code-issue-1st/</link><pubDate>Sat, 13 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/13/the-problems-i-encountered-when-writing-go-code-issue-1st/</guid><description>程序员步入“大龄”，写代码的节奏也会受到影响。以前是长时间持续地写，现在写代码的节奏变成了“波浪形”：即写一段时间，歇一段时间。当然这里的“歇”并不是真的歇，而是做其他事情了，比如：回顾、整理与总结。 平时写Go代码，时不时就遇到一些问题，或是写出一些让自己还算满意的代码，这里全部列为“问题”行列。这些“问题”(以及其解决方法)往往比较“小”、比较“碎片”，不适合以自己“擅长”的“长篇”风格写出来...</description></item><item><title>TB一周萃选[第4期]</title><link>https://tonybai.com/2018/01/06/4th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sat, 06 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/06/4th-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第4期\]”**的归档。 &amp;gt; 孩子，我要求你读书用功，不是因为我要你跟别人比成绩，而是因为，我希望你将来会拥有选择的权利，选择有意义、有时间的工作，而不是被迫谋生。当你的工作在你心中有意义，你就有成就感。当你的工作给你时间，不剥夺你的生活，你就有尊严。成就感和尊严，给你快乐。——龙应台 《亲爱的安德烈》 这两天中原大地的一场大雪正式宣告了深冬的...</description></item><item><title>使用istio治理微服务入门</title><link>https://tonybai.com/2018/01/03/an-intro-of-microservices-governance-by-istio/</link><pubDate>Wed, 03 Jan 2018 00:00:00 +0800</pubDate><guid>https://tonybai.com/2018/01/03/an-intro-of-microservices-governance-by-istio/</guid><description>近两年微服务架构流行，主流互联网厂商内部都已经微服务化，初创企业虽然技术积淀不行，但也通过各种开源工具拥抱微服务。再加上容器技术赋能，Kubernetes又添了一把火，微服务架构已然成为当前软件架构设计的首选。 **但微服务化易弄，服务治理难搞！** 一、微服务的“痛点” ---------- 微服务化没有统一标准，多数是进行业务领域垂直切分，业务按一定的粒度划分职责，并形成清晰、职责单一的服务接...</description></item><item><title>TB一周萃选[第3期]</title><link>https://tonybai.com/2017/12/30/3rd-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sat, 30 Dec 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/12/30/3rd-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**“TB一周萃选\[第3期\]”**的归档。 &amp;gt; 《岁旦》 &amp;gt; &amp;gt; &amp;gt; 宋伯仁 宋代诗人 &amp;gt; &amp;gt; 居间无贺客，早起只如常。桃版随人换，梅花隔岁香。 &amp;gt; 　　春风回笑语，云气卜丰穰。柏酒何劳劝，心平寿自长。 本期萃选是2017年的最后一期，也是迎接2018新年“承前启后”的一期。 对于现代中国人来说，公历新年又称为“元旦”。但稍有些历史常识的朋友都会知道：此“元旦”...</description></item><item><title>TB一周萃选[第2期]</title><link>https://tonybai.com/2017/12/22/2nd-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Fri, 22 Dec 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/12/22/2nd-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章**TB一周萃选\[第2期\]**的归档。 封面 &amp;gt; “我天性不宜交际。 &amp;gt; &amp;gt; 在多数场合，我不是觉得对方乏味，就是害怕对方觉得我乏味。可是我既不愿忍受对方的乏味，也不愿费劲使自己显得有趣，那都太累了。 &amp;gt; &amp;gt; 我独处时最轻松，因为我不觉得自己乏味，即使乏味，也自己承受，不累及他人，无需感到不安。” ——周国平 本周日晚上就是平安夜了！ 圣诞节，是西方最重要的节日...</description></item><item><title>追求极简：Docker镜像构建演化史</title><link>https://tonybai.com/2017/12/21/the-concise-history-of-docker-image-building/</link><pubDate>Thu, 21 Dec 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/12/21/the-concise-history-of-docker-image-building/</guid><description>本文首发于CSDN《程序员》杂志2017.12期，这里是原文地址。 本文为《程序员》杂志授权转载，谢绝其他转载。全文如下： 自从2013年dotCloud公司(现已改名为Docker Inc)发布Docker容器技术以来，到目前为止已经有四年多的时间了。这期间Docker技术)飞速发展，并催生出一个生机勃勃的、以轻量级容器技术为基础的庞大的容器平台生态圈。作为Docker三大核心技术之一的镜像技术...</description></item><item><title>TB一周萃选[第1期]</title><link>https://tonybai.com/2017/12/17/1st-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</link><pubDate>Sun, 17 Dec 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/12/17/1st-issue-of-the-tech-weekly-carefully-chosen-by-tonybai/</guid><description>本文是首发于个人微信公众号的文章[TB一周萃选\[第1期\]](https://mp.weixin.qq.com/s?__biz=MzIyNzM0MDk0Mg==&amp;amp;mid=2247483848&amp;amp;idx=1&amp;amp;sn=a3cd9182a2b2d3716623cc2c43d59f37&amp;amp;chksm=e863e629df146f3f421f37672d25400bf6f7f52627bf72e99bf7fb7...</description></item><item><title>在Kubernetes集群上部署高可用Harbor镜像仓库</title><link>https://tonybai.com/2017/12/08/deploy-high-availability-harbor-on-kubernetes-cluster/</link><pubDate>Fri, 08 Dec 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/12/08/deploy-high-availability-harbor-on-kubernetes-cluster/</guid><description>关于基于Harbor的高可用私有镜像仓库，在我的博客里曾不止一次提到，在源创会2017沈阳站上，我还专门以此题目和大家做了分享。事后，很多人通过微博私信、个人公众号或博客评论问我是否可以在Kubernetes集群上安装高可用的Harbor仓库，今天我就用这篇文章来回答大家这个问题。 一、Kubernetes上的高可用Harbor方案 ------------------------- 首先，我可以...</description></item><item><title>Goroutine调度实例简要分析</title><link>https://tonybai.com/2017/11/23/the-simple-analysis-of-goroutine-schedule-examples/</link><pubDate>Thu, 23 Nov 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/11/23/the-simple-analysis-of-goroutine-schedule-examples/</guid><description>前两天一位网友在微博私信我这样一个问题： &amp;gt; 抱歉打扰您咨询您一个关于Go的问题：对于goroutine的概念我是明了的，但很疑惑goroutine的调度问题, 根据《Go语言编程》一书：“当一个任务正在执行时，外部没有办法终止它。要进行任务切换，只能通过由该任务自身调用yield()来主动出让CPU使用权。” 那么，假设我的goroutine是一个死循环的话，是否其它goroutine就没有执行...</description></item><item><title>理解Docker的多阶段镜像构建</title><link>https://tonybai.com/2017/11/11/multi-stage-image-build-in-docker/</link><pubDate>Sat, 11 Nov 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/11/11/multi-stage-image-build-in-docker/</guid><description>Docker技术从2013年诞生到目前已经4年有余了。对于已经接纳和使用Docker技术)在日常开发工作中的开发者而言，构建Docker镜像已经是家常便饭。但这是否意味着Docker的image构建机制已经相对完美了呢？不是的，Docker官方依旧在持续优化镜像构建机制。这不，从今年发布的Docker 17.05版本起，Docker开始支持容器镜像的多阶段构建(multi-stage build)...</description></item><item><title>Hello，Termux</title><link>https://tonybai.com/2017/11/09/hello-termux/</link><pubDate>Thu, 09 Nov 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/11/09/hello-termux/</guid><description>**_程序员或多或少都有一颗Geek(极客)的心^0^。- Tony Bai_** 折腾开始。 这一切都源于前不久将手机换成了Xiaomi的MIX2。因为青睐开放的系统（相对于水果公司系统的封闭，当然Mac笔记本除外^0^），我长期使用Android平台)的手机。但之前被三星Note3手机的“大屏”搞的不是很舒服，这两年一直用5寸及以下的手机，因为单手操作体验良好。MIX2的所谓“全面屏”概念又让...</description></item><item><title>再谈Docker容器单机网络：利用iptables trace和ebtables log</title><link>https://tonybai.com/2017/11/06/explain-docker-single-host-network-using-iptables-trace-and-ebtables-log/</link><pubDate>Mon, 06 Nov 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/11/06/explain-docker-single-host-network-using-iptables-trace-and-ebtables-log/</guid><description>这大半年一直在搞Kubernetes。每次搭建Kubernetes集群，或多或少都会被Kubernetes的“网络插件们”折腾折腾。因此，要说目前Kubernetes中最难搞的是什么？个人觉得莫过于其Pod网络了，至少也是最难搞的之一。除此之外，以Service和Pod为中心的Kubernetes架构还大量利用iptables规则来实现Service的反向代理和负载均衡，这又与Docker原生容器...</description></item><item><title>源创会开源访谈：十年成长，Go语言的演化之路</title><link>https://tonybai.com/2017/10/24/go-evolution-for-ten-years-an-interview-by-osc/</link><pubDate>Tue, 24 Oct 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/10/24/go-evolution-for-ten-years-an-interview-by-osc/</guid><description>在参加源创会沈阳站分享之前，接受了开源中国社区编辑王练的文字专访，以下是我针对专访稿的内容。 同时该专访稿首发于开源中国开源访谈栏目，大家可以点击这里看到首发原稿。 1、首先请介绍一下自己 大家好！我叫白明（Tony Bai），目前是东软云科技的一名架构师，专职于服务端开发，日常工作主要使用Go语言。我算是国内较早接触Go语言的程序员兼Advocater了，平时在我的博客、微博和微信公众号”iam...</description></item><item><title>源创会2017沈阳站讲稿：基于Harbor的高可用企业级私有容器镜像仓库部署实践</title><link>https://tonybai.com/2017/10/23/the-speech-script-practice-on-deploying-a-ha-harbor-cluster-for-osc-shenyang-2017/</link><pubDate>Mon, 23 Oct 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/10/23/the-speech-script-practice-on-deploying-a-ha-harbor-cluster-for-osc-shenyang-2017/</guid><description>上周六开源中国的源创会在沈阳举办了一次技术活动，很荣幸以本地讲师的身份和大家交流了一个topic: “基于Harbor的高可用企业级私有容器镜像仓库部署实践”。之所以选择这个topic，是因为这是我们团队的项目实践心得。很多企业和组织在深入使用Docker之后，都会有类似的高可用私有容器仓库搭建的需求，于是我就把我们摸索的实践和填坑过程拿出来，用30分钟与大家分享一下。另外这算是一个入门级的分享，...</description></item><item><title>Kubernetes节点资源耗尽状态的处理</title><link>https://tonybai.com/2017/10/16/out-of-node-resource-handling-in-kubernetes-cluster/</link><pubDate>Mon, 16 Oct 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/10/16/out-of-node-resource-handling-in-kubernetes-cluster/</guid><description>今天上午一到工位，就收到来自同事的“投诉”：私有云上的Kubernetes cluster中的一个node似乎不工作了，因为专门部署于那个节点上的应用挂掉了，并且长时间没有恢复。这个公司私有云上Kubernetes集群是v1.7.5版本，部署于双节假期之前。最近感觉K8s开发明显提速，连续发布版本，截至发稿时，最新发布的版本为v1.8.1了。这个集群一直运行相对稳定，今天这个异常到底是怎么一回事呢...</description></item><item><title>Kubernetes Dashboard 1.7.0部署二三事</title><link>https://tonybai.com/2017/09/26/some-notes-about-deploying-kubernetes-dashboard-1-7-0/</link><pubDate>Tue, 26 Sep 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/09/26/some-notes-about-deploying-kubernetes-dashboard-1-7-0/</guid><description>由于开发的平台要进行内部公开测试，我们这周在公司内部私有云搭建了一套平台。涉及到Kubernetes相关的基础软件，由我来部署。Kubernetes以及其相关组件都在积极的开发中，版本更新也很快。截至本文撰写时，K8s发布最新稳定版是v1.7.6，而与之配套的Dashboard则是v1.7.0。 最初在部署规划时，我选择了Kubernetes v1.7.6+ dashboard v1.6.3的组合...</description></item><item><title>Go语言：成长的十年</title><link>https://tonybai.com/2017/09/24/go-ten-years-and-climbing/</link><pubDate>Sun, 24 Sep 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/09/24/go-ten-years-and-climbing/</guid><description>Go语言之父，Google大神Rob Pike代表Go语言的另外两位缔造者Robert Griesemer和Ken Thompson在自己的博客上发表了一篇名为《Go: Ten years and climbing》的文章，用以纪念Go语言从最初的设计idea起到目前的十年发展。笔者读完后，也是深有感触，因此在这里粗略翻译一下全文，希望能有更多的程序员加入到Gopher行列中来。 译文全文如下： ...</description></item><item><title>Hello, Apollo</title><link>https://tonybai.com/2017/08/15/hello-apollo/</link><pubDate>Tue, 15 Aug 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/08/15/hello-apollo/</guid><description>要说目前哪个技术领域投资最火热，莫过于人工智能。而人工智能领域中最火的(或者说之一)肯定要算上自动驾驶。自动驾驶的概念不是什么新鲜的玩意了，只是随着近两年这一波人工智能的大热，自动驾驶又被推到了风口浪尖。各大汽车厂商、互联网公司也都跃跃欲试，准备给汽车这一“历经百年的黄金平台”做一次新的“赋能”。 今年7月5日，国内搜索引擎No.1企业百度在其首届百度AI开发者大会上发布了Apollo自动驾驶开放...</description></item><item><title>解决Kubernetes 1.7.3 kube-apiserver频繁异常重启的问题</title><link>https://tonybai.com/2017/08/09/fix-kube-apiserver-restart-exceptionally-in-k8s-1-7-3/</link><pubDate>Wed, 09 Aug 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/08/09/fix-kube-apiserver-restart-exceptionally-in-k8s-1-7-3/</guid><description>近期将之前的一个用kube-up.sh安装的Kubernetes 1.3.7的环境更换为最新发布的用kubeadm安装的Kubernetes 1.7.3版本。新版本的安装过程和之前的采用kubeadm安装的k8s 1.5.x、1.6.x版本类似，这里不赘述了。但在安装Dashboard后，发现了一些问题，这里记录一下解决的过程。 一、第一个问题 ------- 我们先来做一下回顾。在《解决Kube...</description></item><item><title>Hello, ROS</title><link>https://tonybai.com/2017/08/01/hello-ros/</link><pubDate>Tue, 01 Aug 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/08/01/hello-ros/</guid><description>ROS，全称是Robot Operating System，字面译为“机器人操作系统”。不过ROS并非是一个真正意义上的操作系统，而仅仅是一套用于机器人操作和控制软件开发的开发框架(framework)，包括各种库和工具。 ROS在2007年诞生于斯坦福大学的人工智能实验室Stanford Artificial Intelligence Laboratory，简称SAIL；2008年至2013年，...</description></item><item><title>解决Kubernetes 1.6.4 Dashboard无法访问的问题</title><link>https://tonybai.com/2017/07/20/fix-cannot-access-dashboard-in-k8s-1-6-4/</link><pubDate>Thu, 20 Jul 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/07/20/fix-cannot-access-dashboard-in-k8s-1-6-4/</guid><description>前一段时间将之前采用kubeadm安装的Kubernetes 1.5.1环境升级到了1.6.4版本，升级过程较为顺利。由于该k8s cluster是一个测试环境，当时并没有过于关注，就忙别的事情了。最近项目组打算在这个环境下做一些事情，而当我们重新“捡起”这个环境时，发现Kubernetes Dashboard无法访问了。 Kubernetes的dashboard可以有很多种访问方式，比如：可以通...</description></item><item><title>Go 1.9中值得关注的几个变化</title><link>https://tonybai.com/2017/07/14/some-changes-in-go-1-9/</link><pubDate>Fri, 14 Jul 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/07/14/some-changes-in-go-1-9/</guid><description>Go语言在2016年当选tiobe index的年度编程语言。 转眼间6个月过去了，Go在tiobe index排行榜上继续强势攀升，在最新公布的TIBOE INDEX 7月份的排行榜上，Go挺进Top10： 还有不到一个月，Go 1.9版本也要正式Release了（计划8月份发布），当前Go 1.9的最新版本是go1.9beta2，本篇的实验环境也是基于该版本的，估计与final go 1.9版...</description></item><item><title>搭建你自己的Go Runtime metrics环境</title><link>https://tonybai.com/2017/07/04/setup-go-runtime-metrics-for-yourself/</link><pubDate>Tue, 04 Jul 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/07/04/setup-go-runtime-metrics-for-yourself/</guid><description>自从Go 1.5开始，每次Go release, Gopher Brian Hatfield都会将自己对新版Go的runtime的性能数据（与之前Go版本的比较）在twitter上晒出来。就连Go team staff在世界各地做speaking时也在slide中引用Brian的图片。后来，Brian Hatfield将其用于度量runtime性能数据的代码打包成library并放在github上...</description></item><item><title>使用govanityurls让私有代码仓库中的go包支持go get</title><link>https://tonybai.com/2017/06/30/go-get-go-packages-in-private-code-repo-by-govanityurls/</link><pubDate>Fri, 30 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/30/go-get-go-packages-in-private-code-repo-by-govanityurls/</guid><description>《定制Go Package的Go Get导入路径》一文中我们讲到了通过使用govanityurls服务，我们可以定制go package的go get导入路径。不过，govanityurls的用途还不止这些，它还可以让你的私有代码仓库中的go package支持go get。 众所周知，开源的Go package一般分布在github、bitbucket等站点，但商业组织内部闭源的Go packa...</description></item><item><title>定制Go Package的Go Get导入路径</title><link>https://tonybai.com/2017/06/28/set-custom-go-get-import-path-for-go-package/</link><pubDate>Wed, 28 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/28/set-custom-go-get-import-path-for-go-package/</guid><description>近期Go team的组员Jaana B. Dogan，网名：rakyll开源了一个小工具：Go Vanity URLs。这个小工具可以帮助你快速为你的Go package定制Go get的导入路径（同样也是package被使用时的import路径）。 说到go package的go get导入路径，我们最常见和常使用的domain name就是github.com了，比如：beego包的go ge...</description></item><item><title>也谈Go的可移植性</title><link>https://tonybai.com/2017/06/27/an-intro-about-go-portability/</link><pubDate>Tue, 27 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/27/an-intro-about-go-portability/</guid><description>Go有很多优点，比如：简单、原生支持并发等，而不错的可移植性也是Go被广大程序员接纳的重要因素之一。但你知道为什么Go语言拥有很好的平台可移植性吗？本着“知其然，亦要知其所以然”的精神，本文我们就来探究一下Go良好可移植性背后的原理。 一、Go的可移植性 --------- 说到一门编程语言可移植性，我们一般从下面两个方面考量： * 语言自身被移植到不同平台的容易程度； * 通过这种语言编译出来的...</description></item><item><title>也谈goroutine调度器</title><link>https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/</link><pubDate>Fri, 23 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/</guid><description>Go语言在2016年再次拿下TIBOE年度编程语言称号，这充分证明了Go语言这几年在全世界范围内的受欢迎程度。如果要对世界范围内的gopher发起一次“你究竟喜欢Go的哪一点”的调查，我相信很多Gopher会提到：**goroutine**。 Goroutine是Go语言原生支持并发的具体实现，你的Go代码都无一例外地跑在goroutine中。你可以启动许多甚至成千上万的goroutine，Go的...</description></item><item><title>解决登录Harbor Registry时鉴权失败的问题</title><link>https://tonybai.com/2017/06/15/fix-auth-fail-when-login-harbor-registry/</link><pubDate>Thu, 15 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/15/fix-auth-fail-when-login-harbor-registry/</guid><description>今天在测试之前搭建好的高可用Harbor时，发现了一个问题：使用docker login harbor时，有时成功，有时失败： docker login -u user -p passwd http://hub.my-domain.com:36666 Login Succeeded docker login -u user -p passwd http://hub.my-domain.com:36...</description></item><item><title>基于Harbor和CephFS搭建高可用Private Registry</title><link>https://tonybai.com/2017/06/09/setup-a-high-availability-private-registry-based-on-harbor-and-cephfs/</link><pubDate>Fri, 09 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/09/setup-a-high-availability-private-registry-based-on-harbor-and-cephfs/</guid><description>我们有给客户搭建私有容器仓库的需求。开源的私有容器registry可供选择的不多，除了docker官方的distribution之外，比较知名的是VMware China出品的Harbor，我们选择了harbor。 harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。harbor以docker-compose的规范形式组织各...</description></item><item><title>初窥dep</title><link>https://tonybai.com/2017/06/08/first-glimpse-of-dep/</link><pubDate>Thu, 08 Jun 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/06/08/first-glimpse-of-dep/</guid><description>Go语言程序组织和构建的基本单元是Package，但Go语言官方却没有提供一款“像样的”Package Management Tool(包管理工具)。随着Go语言在全球范围内应用的愈加广泛，缺少官方包管理工具这一问题变得日益突出。 2016年GopherCon大会后，在Go官方的组织下，一个旨在改善Go包管理的commitee成立了，共同应对Go在package management上遇到的各种问...</description></item><item><title>一步步打造基于Kubeadm的高可用Kubernetes集群-第二部分</title><link>https://tonybai.com/2017/05/15/setup-a-ha-kubernetes-cluster-based-on-kubeadm-part2/</link><pubDate>Mon, 15 May 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/05/15/setup-a-ha-kubernetes-cluster-based-on-kubeadm-part2/</guid><description>续接上文。 五、第三步：启动emei、wudang上的apiserver ------------------------------ 跨三个node的etcd cluster已经建成并完成了数据同步，下面进行ha cluster改造的重要一步：启动wudang、emei上的apiserver 1、启动emei、wudang上的apiserver 以shaolin node上的/etc/kuber...</description></item><item><title>一步步打造基于Kubeadm的高可用Kubernetes集群-第一部分</title><link>https://tonybai.com/2017/05/15/setup-a-ha-kubernetes-cluster-based-on-kubeadm-part1/</link><pubDate>Mon, 15 May 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/05/15/setup-a-ha-kubernetes-cluster-based-on-kubeadm-part1/</guid><description>Kubernetes集群的核心是其master node，但目前默认情况下master node只有一个，一旦master node出现问题，Kubernetes集群将陷入“瘫痪”，对集群的管理、Pod的调度等均将无法实施，即便此时某些用户的Pod依旧可以正常运行。这显然不能符合我们对于运行于生产环境下的Kubernetes集群的要求，我们需要一个高可用的Kubernetes集群。 不过，目前Ku...</description></item><item><title>Kubernetes集群node主机名修改导致的异常</title><link>https://tonybai.com/2017/05/09/exception-caused-by-kubernetes-node-hostname-change/</link><pubDate>Tue, 09 May 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/05/09/exception-caused-by-kubernetes-node-hostname-change/</guid><description>除了在生产环境使用的Kubernetes 1.3.7集群之外，我这里还有一套1.5.1的Kubernetes测试环境，这个测试环境一来用于验证各种技术方案，二来也是为了跟踪Kubernetes的最新进展。本篇要记录的一个异常就是发生在该测试Kubernetes集群中的。 一、缘起 前两天我在Kubernetes测试环境搭建一套Ceph，为了便于ceph-deploy的安装，我通过hostnamec...</description></item><item><title>Kubernetes集群跨节点挂载CephFS</title><link>https://tonybai.com/2017/05/08/mount-cephfs-acrossing-nodes-in-kubernetes-cluster/</link><pubDate>Mon, 08 May 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/05/08/mount-cephfs-acrossing-nodes-in-kubernetes-cluster/</guid><description>在Kubernetes集群中运行有状态服务或应用总是不那么容易的。比如，之前我在项目中使用了CephRBD，虽然遇到过几次问题，但总体算是运行良好。但最近发现CephRBD无法满足跨节点挂载的需求，我只好另辟蹊径。由于CephFS和CephRBD师出同门，它自然成为了这次我首要考察的目标。这里将跨节点挂载CephFS的考察过程记录一下，一是备忘，二则也可以为其他有相似需求的朋友提供些资料。 一、C...</description></item><item><title>Go coding in go way</title><link>https://tonybai.com/2017/04/20/go-coding-in-go-way/</link><pubDate>Thu, 20 Apr 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/04/20/go-coding-in-go-way/</guid><description>本篇文章是我在2017年第三届GopherChina大会上所作talk：”Go coding in go way)“的改编和展开版，全文如下。 一、序 --- 今天我要分享的题目是**“Go coding in go way”**，中文含义就是用**“Go语言编程思维去写Go代码”**。看到这个题目大家不禁要问：究竟什么是Go语言编程思维呢？关于什么是Go语言变成思维其实并没有官方说法。这里要和大...</description></item><item><title>GopherChina2017以讲师身份参会感悟</title><link>https://tonybai.com/2017/04/18/my-experience-of-gopherchina-2017-as-a-speaker/</link><pubDate>Tue, 18 Apr 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/04/18/my-experience-of-gopherchina-2017-as-a-speaker/</guid><description>时光荏苒。2016年北京GopherChina大会的情形还历历在目，2017年上海GopherChina大会又如约而至。 一、印象 这是我连续第二年参加AstaXie组织举办的GopherChina大会。而且不同于去年的是，这次我是以讲师身份参与的。虽然大会地点不同，我的角色不同，但不变的是和广大Gophers一样的对Go语言的极大热情。 这也是第三届GopherChina大会。随着Go语言自身的...</description></item><item><title>GopherChina讲师专访</title><link>https://tonybai.com/2017/04/06/an-interview-with-me-as-a-lecturer-of-gopherchina-2017/</link><pubDate>Thu, 06 Apr 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/04/06/an-interview-with-me-as-a-lecturer-of-gopherchina-2017/</guid><description>今年有幸收到GopherChina大会的组织者、beego开源项目的owner、《Go Web编程》的作者谢孟军童鞋的邀请，以讲师身份参加今年的GopherChina大会。下面是GopherChina对我这个讲师的专访稿^0^。该专访稿将同时被发布在公众号“Go中国(微信号：golangchina)”上面，可点击这里&amp;amp;version=11020201&amp;amp;pass_ticket=ubemadJo5Ju...</description></item><item><title>使用Fluentd和ElasticSearch Stack实现Kubernetes的集群Logging</title><link>https://tonybai.com/2017/03/03/implement-kubernetes-cluster-level-logging-with-fluentd-and-elasticsearch-stack/</link><pubDate>Fri, 03 Mar 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/03/03/implement-kubernetes-cluster-level-logging-with-fluentd-and-elasticsearch-stack/</guid><description>在本篇文章中，我们继续来说Kubernetes。 经过一段时间的探索，我们先后完成了Kubernetes集群搭建，DNS、Dashboard、Heapster等插件安装，集群安全配置，搭建作为Persistent Volume的CephRBD，以及服务更新等探索和实现工作。现在Kubernetes集群层面的Logging需求逐渐浮上水面了。 随着一些小应用在我们的Kubernetes集群上的部署上...</description></item><item><title>在Kubernetes Pod中使用Service Account访问API Server</title><link>https://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/</link><pubDate>Fri, 03 Mar 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/</guid><description>Kubernetes API Server是整个Kubernetes集群的核心，我们不仅有从集群外部访问API Server的需求，有时，我们还需要从Pod的内部访问API Server。 然而，在生产环境中，Kubernetes API Server都是“设防”的。在《Kubernetes集群的安全配置》一文中，我提到过：Kubernetes通过client cert、static token、...</description></item><item><title>Kubernetes集群Pod使用Host的本地时区设置</title><link>https://tonybai.com/2017/02/20/use-host-timezone-in-kubernetes-pods/</link><pubDate>Mon, 20 Feb 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/02/20/use-host-timezone-in-kubernetes-pods/</guid><description>Kubernetes集群搭建起来后，一直跑得很稳定。之前的关注点更多集中在安装、配置、组件调试方面，一些细枝末节被忽略了。Pod中时区的设置就是其中之一。今天腾出功夫打算解决一下这个问题。 一、问题现象 在我的Kubernetes 1.3.7集群的Master Node上，我们执行： date Mon Feb 20 11:49:20 CST 2017 之后，在该Node上随意找到一个Pod中的Co...</description></item><item><title>Kubernetes Pod无法挂载ceph RBD存储卷的临时解决方法</title><link>https://tonybai.com/2017/02/17/temp-fix-for-pod-unable-mount-cephrbd-volume/</link><pubDate>Fri, 17 Feb 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/02/17/temp-fix-for-pod-unable-mount-cephrbd-volume/</guid><description>所有涉及到存储的地方都是极易出现“坑”的地方，Kubernetes也不例外。 一、问题起因 问题始于昨天升级一个stateful service的操作。该service下的Pod挂载了使用ceph RBD提供的一个Persistent Volume。该Pod是用普通deployment部署的，并没有使用处于alpha状态的PetSet。改动仅仅是image的版本发生了变化。我执行的操作如下： ku...</description></item><item><title>Kubernetes集群中Service的滚动更新</title><link>https://tonybai.com/2017/02/09/rolling-update-for-services-in-kubernetes-cluster/</link><pubDate>Thu, 09 Feb 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/02/09/rolling-update-for-services-in-kubernetes-cluster/</guid><description>在移动互联网时代，消费者的消费行为已经“全天候化”，为此，商家的业务系统也要保持7×24小时不间断地提供服务以满足消费者的需求。很难想像如今还会有以“中断业务”为前提的服务系统更新升级。如果微信官方发布公告说：每周六晚23:00~次日凌晨2:00进行例行系统升级，不能提供服务，作为用户的你会怎么想、怎么做呢？因此，各个平台在最初设计时就要考虑到服务的更新升级问题，部署在Kubernetes集群中的...</description></item><item><title>TensorFlow入门：零基础建立第一个神经网络</title><link>https://tonybai.com/2017/02/06/build-your-first-neural-network-with-tensorflow/</link><pubDate>Mon, 06 Feb 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/02/06/build-your-first-neural-network-with-tensorflow/</guid><description>首先，我不得不承认这篇文章有些标题党的味道^0^，但文章还是要继续写下去，备忘也好，能帮助到一些人也好。 在2016小结的时候，我说过：2017年要了解一些有关机器学习和人工智能(以下简称AI)方面的技术。如果有童鞋问：Why？我会告诉你：跟风。作为技术人，关注和紧跟业界最前沿的技术总是没错的。 2016年被业界普遍认为是AI这一波高速发展的元年，当然DeepMind的AlphaGo在这方面所起到...</description></item><item><title>Go 1.8中值得关注的几个变化</title><link>https://tonybai.com/2017/02/03/some-changes-in-go-1-8/</link><pubDate>Fri, 03 Feb 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/02/03/some-changes-in-go-1-8/</guid><description>在已经过去的2016年，Go语言继在2009年之后再次成为编程语言界的明星- 问鼎TIOBE 2016年度语言。这与Go team、Go community和全世界的Gophers的努力是分不开的。按计划在这个2月份，Go team将正式发布Go 1.8版本(截至目前，Go的最新版本是Go 1.8rc3)。在这里我们一起来看一下在Go 1.8版本中都有哪些值得Gopher们关注的变化。 一、语言（...</description></item><item><title>以Kubeadm方式安装的Kubernetes集群的探索</title><link>https://tonybai.com/2017/01/24/explore-kubernetes-cluster-installed-by-kubeadm/</link><pubDate>Tue, 24 Jan 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/01/24/explore-kubernetes-cluster-installed-by-kubeadm/</guid><description>当前手上有两个Kubernetes cluster，一个是采用kube-up.sh安装的k8s 1.3.7版本，另外一个则是采用kubeadm安装的k8s 1.5.1版本。由于1.3.7版本安装在前，并且目前它也是承载了我们PaaS平台的环境，因此对于这个版本的Kubernetes安装环境、配置操作、日志查看、集群操作等相对较为熟悉。而Kubeadm安装的1.5.1版本K8s集群在组件部署、配置、...</description></item><item><title>Kubernetes Dashboard集成Heapster</title><link>https://tonybai.com/2017/01/20/integrate-heapster-for-kubernetes-dashboard/</link><pubDate>Fri, 20 Jan 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/01/20/integrate-heapster-for-kubernetes-dashboard/</guid><description>默认安装后的Kubernetes dashboard如下图所示，是无法图形化展现集群度量指标信息的： 图形化展示度量指标的实现需要集成k8s的另外一个Addons组件：Heapster。 Heapster原生支持K8s(v1.0.6及以后版本)和CoreOS，并且支持多种存储后端，比如：InfluxDB、ElasticSearch、Kafka等，这个风格和k8s的确很像：功能先不管完善与否，先让自...</description></item><item><title>Kubernetes集群Dashboard插件安装</title><link>https://tonybai.com/2017/01/19/install-dashboard-addon-for-k8s/</link><pubDate>Thu, 19 Jan 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/01/19/install-dashboard-addon-for-k8s/</guid><description>第一次利用kube-up.sh脚本方式安装Kubernetes 1.3.7集群时，我就已经顺利地将kubernetes dashboard addon安装ok了。至今在这个环境下运行十分稳定。但是毕竟是一个试验环境，有些配置是无法满足生产环境要求的，比如：安全问题。今天有时间对Dashboard的配置进行一些调整，顺带将之前Dashboard插件的安装和配置过程也记录下来，供大家参考。 一、Das...</description></item><item><title>理解Kubernetes网络之Flannel网络</title><link>https://tonybai.com/2017/01/17/understanding-flannel-network-for-kubernetes/</link><pubDate>Tue, 17 Jan 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/01/17/understanding-flannel-network-for-kubernetes/</guid><description>第一次采用kube-up.sh脚本方式安装的Kubernetes cluster目前运行良好，master node上的组件状态也始终是“没毛病”： kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {&amp;#34;health&amp;#34;: &amp;#34;true&amp;#34;}...</description></item><item><title>理解Docker容器网络之Linux Network Namespace</title><link>https://tonybai.com/2017/01/11/understanding-linux-network-namespace-for-docker-network/</link><pubDate>Wed, 11 Jan 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/01/11/understanding-linux-network-namespace-for-docker-network/</guid><description>由于2016年年中调换工作的原因，对容器网络的研究中断过一段时间。随着当前项目对Kubernetes应用的深入，我感觉之前对于容器网络的粗浅理解已经不够了，容器网络成了摆在前面的“一道坎”。继续深入理解K8s网络、容器网络已经势在必行。而这篇文章就算是一个重新开始，也是对之前浅表理解的一个补充。 我还是先从Docker容器网络入手，虽然Docker与Kubernetes采用了不同的网络模型：K8s...</description></item><item><title>使用Kubeadm安装Kubernetes</title><link>https://tonybai.com/2016/12/30/install-kubernetes-on-ubuntu-with-kubeadm/</link><pubDate>Fri, 30 Dec 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/12/30/install-kubernetes-on-ubuntu-with-kubeadm/</guid><description>在《当Docker遇到systemd》一文中，我提到过这两天儿一直在做的一个task：使用kubeadm在Ubuntu 16.04上安装部署Kubernetes的最新发布版本-k8s 1.5.1。 年中，Docker宣布在Docker engine中集成swarmkit工具包，这一announcement在轻量级容器界引发轩然大波。毕竟开发者是懒惰的^0^，有了docker swarmkit，驱动...</description></item><item><title>使用Kubeadm安装Kubernetes-Part2</title><link>https://tonybai.com/2016/12/30/install-kubernetes-on-ubuntu-with-kubeadm-2/</link><pubDate>Fri, 30 Dec 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/12/30/install-kubernetes-on-ubuntu-with-kubeadm-2/</guid><description>此文为《使用Kubeadm安装Kubernetes》的第二部分。文章第一部分在这里可以看到。 五、weave network for pod 经过上面那么多次尝试，结果是令人扫兴的。Weave network似乎是最后一颗救命稻草了。有了前面的铺垫，这里就不详细列出各种命令的输出细节了。Weave network也有专门的官方文档用于指导如何与kubernetes集群集成，我们主要也是参考它。 1...</description></item><item><title>当Docker遇到systemd</title><link>https://tonybai.com/2016/12/27/when-docker-meets-systemd/</link><pubDate>Tue, 27 Dec 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/12/27/when-docker-meets-systemd/</guid><description>近期在做Kubernetes集群的升级的相关试验，即从原先的K8s 1.3.7版本升级到最新的K8s 1.5.1版本。k8s自1.4版本开始引入kubeadm，试图简化K8s的安装和使用门槛，提升开发者体验。但kubeadm仅支持16.04及以上的Ubuntu版本，于是我们在升级K8s集群前会遇到另外一个问题：Ubuntu 16.04已经由Upstart初始化系统换成了systemd初始化系统，U...</description></item><item><title>使用Visual Studio Code辅助Go源码编写</title><link>https://tonybai.com/2016/12/23/write-go-code-in-vscode/</link><pubDate>Fri, 23 Dec 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/12/23/write-go-code-in-vscode/</guid><description>作为VIMer，日常编码中，Vim编辑器依然是我的首选。以前以C语言为主要语言的时候是这样，现在以Go为主要语言时亦是这样。不过近期发现Mac上使用Vim在编写Go代码时，Vim时不时的“抽风”：出现一些“屏幕字符被篡改”的问题，比如下面这幅图中”func”变成了”fknc”: 虽然一段时间后，显示会自动更正过来，但这种“篡改”是会让你产生“幻觉”的。你会想：是不是我真的将”func”写成”fkn...</description></item><item><title>论golang Timer Reset方法使用的正确姿势</title><link>https://tonybai.com/2016/12/21/how-to-use-timer-reset-in-golang-correctly/</link><pubDate>Wed, 21 Dec 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/12/21/how-to-use-timer-reset-in-golang-correctly/</guid><description>2016年，Go语言在Tiobe编程语言排行榜上位次的大幅蹿升(2016年12月份Tiobe榜单：go位列第16位，Rating值：1.939%)。与此同时，我们也能切身感受到Go语言在世界范围蓬勃发展，其在中国地界儿上的发展更是尤为猛烈^0^：For gopher们的job变多了、网上关于Go的资料也大有“汗牛充栋”之势。作为职业Gopher^0^，要为这个生态添砖加瓦，就要多思考、多总结，关键...</description></item><item><title>使用wukong全文搜索引擎</title><link>https://tonybai.com/2016/12/06/an-intro-to-wukong-fulltext-search-engine/</link><pubDate>Tue, 06 Dec 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/12/06/an-intro-to-wukong-fulltext-search-engine/</guid><description>近期项目中有一个全文索引和全文搜索的业务需求，组内同事在这方面都没啥经验，找一个满足我们需求的开源的全文搜索引擎势在必行。我们这一期对全文搜索引擎的需求并不复杂，最主要的是引擎可以很好的支持中文分词、索引和搜索，并能快速实现功能。在全文搜索领域，基于Apache lucene的ElasticSearch舍我其谁，其强大的分布式系统能力、对超大规模数据的支持、友好的Restful API以及近实时的...</description></item><item><title>Kubernetes集群的安全配置</title><link>https://tonybai.com/2016/11/25/the-security-settings-for-kubernetes-cluster/</link><pubDate>Fri, 25 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/25/the-security-settings-for-kubernetes-cluster/</guid><description>使用kubernetes/cluster/kube-up.sh脚本在装有Ubuntu操作系统的bare metal上搭建的Kubernetes集群并不安全，甚至可以说是“完全不设防的”，这是因为Kubernetes集群的核心组件：kube-apiserver启用了insecure-port。insecure-port背后的api server默认完全信任访问该端口的流量，内部无任何安全机制。并且监...</description></item><item><title>为Kubernetes集群中服务部署Nginx入口服务</title><link>https://tonybai.com/2016/11/22/deploy-nginx-service-for-the-services-in-kubernetes-cluster/</link><pubDate>Tue, 22 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/22/deploy-nginx-service-for-the-services-in-kubernetes-cluster/</guid><description>这段日子，一直在搞与Kubernetes有关的东东：像什么Kubernetes集群搭建、DNS插件安装和配置、集成Ceph RBD持久卷、Private Registry镜像库访问等，这些都缘于正在开发的一个类PaaS小平台的需要：“平台虽小，五脏俱全”。整个平台由Kubernetes集群承载，对于K8s集群内部的Service来说，目前还欠缺一个服务入口。之前的《Kubernetes集群中的Ng...</description></item><item><title>Kuberize Ceph RBD API服务</title><link>https://tonybai.com/2016/11/21/kuberize-ceph-rbd-api-service/</link><pubDate>Mon, 21 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/21/kuberize-ceph-rbd-api-service/</guid><description>在《使用Ceph RBD为Kubernetes集群提供存储卷》一文中，我们提到：借助Kubernetes和Ceph的集成，Kubernetes可以使用Ceph RBD为集群内的Pod提供Persistent Volume。但这一过程中，RBD所使用的image的创建、删除还需要手动管理，于是我们又基于go-ceph实现了对RBD image的程序化管理，我们的最终目标是要这种对RBD image的...</description></item><item><title>Kubernetes集群中的Nginx配置热更新方案</title><link>https://tonybai.com/2016/11/17/nginx-config-hot-reloading-approach-for-kubernetes-cluster/</link><pubDate>Thu, 17 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/17/nginx-config-hot-reloading-approach-for-kubernetes-cluster/</guid><description>Nginx已经是互联网IT业界一个无敌的存在，作为反向代理、负载均衡、Web服务器等多种角色的扮演者，Nginx在全球各个互联网公司落地、开花和结果，Ngnix已经成为了支撑全球互联网应用的一个不可获取的组成部分。 在我们的平台中，Nginx同样被拿来作为服务接入的最前端的反向代理，并且我们的Nginx也是作为一个Service跑在我们的Kubernetes集群中的。Ngnix背后的服务众多，服务...</description></item><item><title>Kubernetes从Private Registry中拉取容器镜像的方法</title><link>https://tonybai.com/2016/11/16/how-to-pull-images-from-private-registry-on-kubernetes-cluster/</link><pubDate>Wed, 16 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/16/how-to-pull-images-from-private-registry-on-kubernetes-cluster/</guid><description>话接上文，在《使用go-ceph管理Ceph RBD映像》一文中我们提到了，我们需要自建一个ceph rbd api service用于给我的产品控制台提供RESTful API服务接口。这个服务我也是打算放在kubernetes集群中作为一个Service运行的。这两天完成了这个服务开发，并编写完Service的Dockerfile，将镜像build, tag并push到了我们在阿里云的私有镜像...</description></item><item><title>使用go-ceph管理Ceph RBD映像</title><link>https://tonybai.com/2016/11/09/operate-ceph-rbd-images-with-go-ceph/</link><pubDate>Wed, 09 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/09/operate-ceph-rbd-images-with-go-ceph/</guid><description>在《使用Ceph RBD为Kubernetes集群提供存储卷》一文中，我们了解到，在Kubernetes和ceph的集成过程中，有一个步骤是需要手动操作的，那就是创建ceph osd pool下面的rbd image。我们需要想办法去除这一手动步骤。关于方案，我们首先想到的就是是否可以调用Ceph提供的REST API来管理rbd的pool和image？ Ceph提供了两套REST API方案：c...</description></item><item><title>使用Ceph RBD为Kubernetes集群提供存储卷</title><link>https://tonybai.com/2016/11/07/integrate-kubernetes-with-ceph-rbd/</link><pubDate>Mon, 07 Nov 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/11/07/integrate-kubernetes-with-ceph-rbd/</guid><description>一旦走上使用Kubernetes的道路，你就会发现这条路并不好走，充满荆棘。即便你使用Kubernetes建立起的集群规模不大，也是需要“五脏俱全”的，否则你根本无法真正将kubernetes用起来，或者说一个半拉子Kubernetes集群很可能无法满足你要支撑的业务需求。在目前我正在从事的一个产品就是这样，光有K8s还不够，考虑到”有状态服务”的需求，我们还需要给Kubernetes配一个后端存...</description></item><item><title>Kubernetes集群DNS插件安装</title><link>https://tonybai.com/2016/10/23/install-dns-addon-for-k8s/</link><pubDate>Sun, 23 Oct 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/10/23/install-dns-addon-for-k8s/</guid><description>在上一篇关于Kubernetes集群安装的文章中，我们建立一个最小可用的k8s集群，不过k8s与1.12版本后的内置了集群管理的Docker不同，k8s是一组松耦合的组件组合而成对外提供服务的。除了核心组件，其他组件是以Add-on形式提供的，比如集群内kube-DNS、K8s Dashboard等。kube-dns是k8s的重要插件，用于完成集群内部service的注册和发现。随着k8s安装和管...</description></item><item><title>一篇文章带你了解Kubernetes安装</title><link>https://tonybai.com/2016/10/18/learn-how-to-install-kubernetes-on-ubuntu/</link><pubDate>Tue, 18 Oct 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/10/18/learn-how-to-install-kubernetes-on-ubuntu/</guid><description>由于之前在阿里云上部署的Docker 1.12.2的Swarm集群没能正常展示出其所宣称的Routing mesh和VIP等功能，为了满足项目需要，我们只能转向另外一种容器集群管理和服务编排工具Kubernetes。 &amp;gt; _注：之前Docker1.12集群的Routing mesh和VIP功能失效的问题，经过在github上与Docker开发人员的沟通，目前已经将问题原因缩小在阿里云的网络上面，目...</description></item><item><title>Docker 1.12 swarm模式下遇到的各种问题</title><link>https://tonybai.com/2016/10/11/some-problems-under-swarm-mode-in-docker-1-12/</link><pubDate>Tue, 11 Oct 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/10/11/some-problems-under-swarm-mode-in-docker-1-12/</guid><description>前段时间，由于工作上的原因，与Docker的联系发生了几个月的中断^\_^，从10月份开始，工作中又与Docker建立了广泛密切的联系。不过这次，Docker却给我泼了一盆冷水:(。事情的经过请允许多慢慢道来。 经过几年的开发，Docker已经成为轻量级容器领域不二的事实标准，应用范围以及社区都在快速发展和壮大。今年的年中，Docker发布了其里程碑的版本Docker 1.12，该版本最大的变动就...</description></item><item><title>Go包导入与Java的差别</title><link>https://tonybai.com/2016/09/13/package-import-in-golang-vs-in-java/</link><pubDate>Tue, 13 Sep 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/09/13/package-import-in-golang-vs-in-java/</guid><description>闲暇时翻阅了近期下载到的电子书《Go in Practice》 ，看到1.2.4 Package Management一节中的代码Demo，感觉作者对Go package导入的说法似乎不够精确：“Packages are imported by their name”(后续的说明将解释不精确的原因)。联想到前几天遇到的一个Java包导入的问题，让我隐约地感觉Java程序员很容易将两种语言的Pack...</description></item><item><title>vim-go更新小记</title><link>https://tonybai.com/2016/09/08/upgrade-vim-go/</link><pubDate>Thu, 08 Sep 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/09/08/upgrade-vim-go/</guid><description>自从上一次配置好Mac上的Golang Vim开发环境，基本上就没怎么动过。近两年过去了，Go已经升级到了1.7版本，Vim-go截至目前也已经演化到了1.8版本了。社区的积极关注和使用，让Vim-go的作者Fatih Arslan备受鼓舞，于是近一年来，积极为vim-go添加新功能，发布新版本，并编写了vim-go的详细tutorial。这让我动了更新Vim-go版本的念头，于是就有了本篇内容。...</description></item><item><title>Go 1.7中值得关注的几个变化</title><link>https://tonybai.com/2016/06/21/some-changes-in-go-1-7/</link><pubDate>Tue, 21 Jun 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/06/21/some-changes-in-go-1-7/</guid><description>零、从Release Cycle说起 从Go 1.3版本开始，Golang核心开发Team的版本开发周期逐渐稳定下来。经过Go 1.4、Go1.5和Go 1.6的实践，大神Russ Cox在Go wiki上大致定义了Go Release Cycle的一般流程： 1. 半年一个major release版本。 2. 发布流程启动时间：每年8月1日和次年2月1日（真正发布日期有可能是这个日子，也可能延...</description></item><item><title>理解Unikernels</title><link>https://tonybai.com/2016/05/16/understanding-unikernels/</link><pubDate>Mon, 16 May 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/05/16/understanding-unikernels/</guid><description>当Docker, Inc在今年年初宣布收购Unikernel Systems公司时，Unikernel对大多数技术人员来说还是很陌生的。直到今天，知名问答类网站知乎上也没有以Unikernel为名字的子话题。国内搜索引擎中关于Unikernel的内容很少，实践相关的内容就更少了。Docker收购Unikernel Systems，显然不是为了将这个其未来潜在的竞争对手干掉，而是嗅到了Unikern...</description></item><item><title>部署devstack</title><link>https://tonybai.com/2016/05/04/deploy-devstack/</link><pubDate>Wed, 04 May 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/05/04/deploy-devstack/</guid><description>新公司是一家数据与基础设施提供商(to B)。初来乍到，和这里的同事了解了一些云计算平台和大数据平台的技术栈。对于“新鲜”(only to me)的技术栈，自己总有一种折腾的冲动，于是就有了这一篇备忘性质的文章，记录一下自己部署devstack的步骤、遇到的问题和解决方法。 和诸多国内提供公有云的厂商一样，公司的云产品也是基于成熟的OpenStack云计算平台框架和组件搭建的，并做了一些定制。长久...</description></item><item><title>GopherChina2016后记</title><link>https://tonybai.com/2016/04/18/my-experience-of-gopherchina2016/</link><pubDate>Mon, 18 Apr 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/04/18/my-experience-of-gopherchina2016/</guid><description>4月17日晚22:51，伴随着D7次动车缓缓驶入沈阳北站，拖着疲惫的身体和些许兴奋的我，结束了两天的GopherChina 2016之旅。 一、GopherChina大会 GopherChina大会是中国大陆地区Golang语言推广第一品牌。2015年在上海成功了举办了第一届大会；2016年，大会发起人astaxie为充分照顾帝都（及周边）Gophers们的情绪^\_^，将GopherChina ...</description></item><item><title>Rancher使用入门</title><link>https://tonybai.com/2016/04/14/an-introduction-about-rancher/</link><pubDate>Thu, 14 Apr 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/04/14/an-introduction-about-rancher/</guid><description>上个月末，Rancher Labs在其官方博客上宣布了 Rancher 1.0正式版本发布。 这是继Apache Mesos、 Google Kubernetes以及Docker 原生 Swarm 之后，又一个可用于Production环境中的容器管理和服务编排工具，而Rancher恰似这个领域的最后一张拼图（请原谅我的孤陋寡闻，如 果有其他 厂商在做这方面产品，请在评论中留言告诉我）。从Ranc...</description></item><item><title>使用Filebeat输送Docker容器的日志</title><link>https://tonybai.com/2016/03/25/ship-docker-container-log-with-filebeat/</link><pubDate>Fri, 25 Mar 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/03/25/ship-docker-container-log-with-filebeat/</guid><description>今天我们来说说Docker容器日志。 一、容器日志输出的旧疾及能力演进 Docker容器在默认情况下会将打印到stdout、stderr的 日志数据存储在本地磁盘上，默认位置为/var/lib/docker/containers/{ContainerId} /{ContainerId}-json.log。在老版本Docker中，这种日志记录方式经常被诟病，诸如：日志大小无限制、无法 Rotate（...</description></item><item><title>现代企业应用架构-使用Docker CaaS交付敏捷的、可移植的、受控的应用</title><link>https://tonybai.com/2016/03/15/modern-application-architecture-for-the-enterprise-with-docker-caas/</link><pubDate>Tue, 15 Mar 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/03/15/modern-application-architecture-for-the-enterprise-with-docker-caas/</guid><description>年初，火得发烫的独角兽IT公司Docker发布了一款新的企业级产品 Docker Datacenter （简称：DDC）。作 为拥有原生Docker容器技术的公司，其每个市场动作都会让轻量级容器生态圈内的公司不敢小觑。而要揣度Docker对商业改变的理解、对容器 技术栈应用的理解以及对新产品和服务在生态圈中的定位，就有必要对Docker的这款产品做一些比较深刻的了解。而其技术白皮书 恰是我们了解 ...</description></item><item><title>部署私有Docker Registry</title><link>https://tonybai.com/2016/02/26/deploy-a-private-docker-registry/</link><pubDate>Fri, 26 Feb 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/02/26/deploy-a-private-docker-registry/</guid><description>安装部署一个私有的Docker Registry是引入、学习和使用Docker这门技术的必经之路之一。尤其是当Docker被所在组织接受，更多人、项目和产品开始接触和使用Docker时，存储和分发自制的Docker image便成了刚需。Docker Registry一如既往的继承了“Docker坑多”的特点，为此这里将自己搭建”各类”Registry过程中执行的步骤、遇到的问题记录下来，为己备忘...</description></item><item><title>Go 1.6中值得关注的几个变化</title><link>https://tonybai.com/2016/02/21/some-changes-in-go-1-6/</link><pubDate>Sun, 21 Feb 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/02/21/some-changes-in-go-1-6/</guid><description>北京时间2016年2月18日凌晨，在Go 1.5发布 半年后，Go 1.6正式Release 了。与Go 1.5的“惊天巨变”（主要指Go自举）相比，Go 1.6的Change 算是很小的了，当然这也与Go 1.6的dev cycle过于短暂有关。但Go社区对此次发布却甚是重视，其热烈程度甚至超出了Go 1.5。在Dave Cheney的倡导 下，Gophers们在全球各地举行了Go 1.6 Re...</description></item><item><title>理解Docker跨多主机容器网络</title><link>https://tonybai.com/2016/02/15/understanding-docker-multi-host-networking/</link><pubDate>Mon, 15 Feb 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/02/15/understanding-docker-multi-host-networking/</guid><description>在Docker 1.9 出世前，跨多主机的容器通信方案大致有如下三种： 1、端口映射 将宿主机A的端口P映射到容器C的网络空间监听的端口P’上，仅提供四层及以上应用和服务使用。这样其他主机上的容器通过访问宿主机A的端口P实 现与容器C的通信。显然这个方案的应用场景很有局限。 2、将物理网卡桥接到虚拟网桥，使得容器与宿主机配置在同一网段下 在各个宿主机上都建立一个新虚拟网桥设备br0，将各自物理网卡...</description></item><item><title>理解Docker容器端口映射</title><link>https://tonybai.com/2016/01/18/understanding-binding-docker-container-ports-to-host/</link><pubDate>Mon, 18 Jan 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/01/18/understanding-binding-docker-container-ports-to-host/</guid><description>在”理解Docker单机容器网络“一文中，还有一个Docker容器网络的功能尚未提及，那就是Docker容器的端口映射。即将容器的服务端口P’ 绑定到宿主机的端口P上，最终达到一种效果：外部程序通过宿主机的P端口访问，就像直接访问Docker容器网络内部容器提供的服务一样。 Docker针对端口映射前后有两种方案，一种是1.7版本之前docker-proxy+iptables DNAT的方式；另一...</description></item><item><title>理解Docker单机容器网络</title><link>https://tonybai.com/2016/01/15/understanding-container-networking-on-single-host/</link><pubDate>Fri, 15 Jan 2016 00:00:00 +0800</pubDate><guid>https://tonybai.com/2016/01/15/understanding-container-networking-on-single-host/</guid><description>Docker容器是近两年最 火的IT技术之一，用“火山爆发式“来形容Docker的成 长也不为过。Docker在产品服务的devops 运维、云 计算(CaaS)、大数据以及企业内部应用等领域正在被越来越多的接受和广泛应用。Docker技术的本质在于提升计算密度和提升部署效率，高屋 建瓴的讲，它的出现符合人类社会对绿色发展的追求，降低资源消耗，提升资源的单位利用率。不过经历了两年多的发展，Dock...</description></item><item><title>Go语言随机测试工具go-fuzz</title><link>https://tonybai.com/2015/12/08/go-fuzz-intro/</link><pubDate>Tue, 08 Dec 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/12/08/go-fuzz-intro/</guid><description>在Go 1.5发布时，前Intel Black Belt级工程师，现Google工程师Dmitry Vyukov同时发布了Go语言随机测试工具go-fuzz。在 GopherCon2015大会上，Dmitry Vyukov在其名为“\[Go Dynamic Tools\]”的presentation中着重介绍了go-fuzz。 go-fuzz是一款随机测试(Random testing)工具。对于...</description></item><item><title>Go语言TCP Socket编程</title><link>https://tonybai.com/2015/11/17/tcp-programming-in-golang/</link><pubDate>Tue, 17 Nov 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/11/17/tcp-programming-in-golang/</guid><description>Golang的主要 设计目标之一就是面向大规模后端服务程序，网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中，我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”，而TCP socket则是网络编程的主流，即便您没有直接使用到net中有关TCP Socket方面的接口，但net/http总是用到了吧，http底层依旧是用tcp socket实现...</description></item><item><title>Go语言错误处理</title><link>https://tonybai.com/2015/10/30/error-handling-in-go/</link><pubDate>Fri, 30 Oct 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/10/30/error-handling-in-go/</guid><description>近期闲暇用Go写一个lib，其中涉及到error处理的地方让我琢磨了许久。关于Go错误处理的资料和视频已有许多，Go authors们也在官方Articles和Blog上多次提到过一些Go error handling方面的一些tips和best practice，这里仅仅算是做个收集和小结，尽视野所及，如有不足，欢迎评论中补充。（10月因各种原因，没有耕博，月末来一发，希望未为晚矣 ^\_^） ...</description></item><item><title>使用Hugo搭建静态站点</title><link>https://tonybai.com/2015/09/23/intro-of-gohugo/</link><pubDate>Wed, 23 Sep 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/09/23/intro-of-gohugo/</guid><description>虽然前一篇Blog宣称自己要用Markdown开始写Post，但实际操作起来还是发现了诸多不兼容问题(插件与主题间、插件与插件间的)，让编写和修改文章变得十分繁琐，于是我研究了一下静态Web站点生成工具Hugo。Hugo是由前Docker的重量级员工(2015年8月末从Docker离职)：Steve Francia实现的一个开源静态站点生成工具框架，类似于Jekyll、Octopress或Hexo...</description></item><item><title>开始使用Markdown写Blog</title><link>https://tonybai.com/2015/09/19/write-blog-in-markdown/</link><pubDate>Sat, 19 Sep 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/09/19/write-blog-in-markdown/</guid><description>近期发了一些带有大量代码的Go技术文章，结果文章中的代码样式被大家鄙视了，比如评论中的“不忍直视”、“这代码看得让人难受”等。于是我决定花些时间尝试做些改变。 博客系统 目前使用的这个博客系统是放在DigitalOcean VPS的Wordpress 3.2.1。在迁移到VPS之前，我的博客是一直托管在同事的一个托管主机上的，当初从blogbus迁移到他的托管WordPress主机时使用的就是Wo...</description></item><item><title>关于Go，你可能不注意的7件事</title><link>https://tonybai.com/2015/09/17/7-things-you-may-not-pay-attation-to-in-go/</link><pubDate>Thu, 17 Sep 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/09/17/7-things-you-may-not-pay-attation-to-in-go/</guid><description>Go以简洁著称，但简洁中不乏值得玩味的小细节。这些小细节不如goroutine、interface和channel那样&amp;#34;高大上&amp;#34;，&amp;#34;屌 丝&amp;#34;得可能不经常被人注意到，但它们却对理解Go语言有着重要的作用。这里想挑出一些和大家一起通过详实的例子来逐一展开和理解。本文内容较为基础，适合初学者，高手可飘过:) **一、源文件字符集****和字符集编码** Go源码文件默认采用Unicode字符集，Unic...</description></item><item><title>理解Golang语句中的求值顺序</title><link>https://tonybai.com/2015/08/27/understanding-go-statements-evaluating-order/</link><pubDate>Thu, 27 Aug 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/08/27/understanding-go-statements-evaluating-order/</guid><description>Golang在变量声明、初始化以及赋值语句上照比C语言有了许多改进： **a) 支持在同一行声明多个变量** var a, b, c int **b) 支持在同一行初始化多个变量（不同类型也可以）** var a, b, c = 5, &amp;#34;hello&amp;#34;, 3.45 a, b, c := 5, &amp;#34;hello&amp;#34;, 3.45 (short variable declaration) **c) 支持在同一行...</description></item><item><title>Go程序调试、分析与优化</title><link>https://tonybai.com/2015/08/25/go-debugging-profiling-optimization/</link><pubDate>Tue, 25 Aug 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/08/25/go-debugging-profiling-optimization/</guid><description>Brad Fitzpatrick在YAPC Asia 2015（Yet Another Perl Conference）上做了一次技术分享，题为：&amp;#34;Go Debugging, Profiling, and Optimization&amp;#34;。个人感觉这篇分享中价值最大的是BradFitz现场演示的一个有关如何对Go程序进行调试、分析和优化的 Demo，Brad将demo上传到了他个人在github.com...</description></item><item><title>Golang技术幻灯片的查看方法</title><link>https://tonybai.com/2015/08/22/how-to-view-golang-tech-slide/</link><pubDate>Sat, 22 Aug 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/08/22/how-to-view-golang-tech-slide/</guid><description>随着go 1.5的发布，golang在世界各地日益受到欢迎，golang技术鼓吹者在世界各地举办各种级别的技术会议(从GopherCon大会到小小的meetup)，并在会议上分享自己的技术心得和技术想法。 Golang相关的技术幻灯片有多种格式，以.ppt, .pdf和.slide为主。ppt、pdf自然不必多说，需要直接下载查看。 .slide是随着golang诞生而出现的一种present格式...</description></item><item><title>weed-fs使用简介</title><link>https://tonybai.com/2015/08/22/intro-of-using-weedfs/</link><pubDate>Sat, 22 Aug 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/08/22/intro-of-using-weedfs/</guid><description>weed-fs，全名Seaweed-fs，是一种用golang实现的简单且高可用的分布式文件系统。该系统的目标有二： \- 存储billions of files \- serve the files fast weed-fs起初是为了搞一个基于Fackbook的Haystack论文的实现，Haystack旨在优化Fackbook内部图片存储和获取。后在这个基 础上，weed-fs作者又增加了若干...</description></item><item><title>godep支持Go 1.5 vendor</title><link>https://tonybai.com/2015/08/05/godep-support-go15-vendor/</link><pubDate>Wed, 05 Aug 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/08/05/godep-support-go15-vendor/</guid><description>Go 1.5 vendor/实验特性出炉后，市面上的go第三方包依赖和管理工具显然都无法与之兼容，除了修改代码，别无它法。市场占有率最大的godep做出了表 率，目前其最新版本(go get github.com/tools/godep)已经初步支持了这一实验特性，即在GO15VENDOREXPERIMENT=1时，将使用vendor 目录（而不是Godeps目录）存放copy的第三方包，并在go...</description></item><item><title>理解Go 1.5 vendor</title><link>https://tonybai.com/2015/07/31/understand-go15-vendor/</link><pubDate>Fri, 31 Jul 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/07/31/understand-go15-vendor/</guid><description>Go 1.5中(目前最新版本go1.5beta3)加入了一个experimental feature: **vendor/**。这个feature不是Go 1.5的正式功能，但却是Go Authors们在解决Go被外界诟病的包依赖管理的道路上的一次重要尝试。目前关于Go vendor机制的资料有限，主要的包括如下几个： 1、Russ Cox在Golang-dev group上的一个名 为&amp;#34;prop...</description></item><item><title>制作go-talks.appspot.com应用镜像</title><link>https://tonybai.com/2015/07/27/make-a-mirror-of-gotalks-appsport-app/</link><pubDate>Mon, 27 Jul 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/07/27/make-a-mirror-of-gotalks-appsport-app/</guid><description>Go语言号称面向工程：对工程目录组织、代码风格（gofmt）、文档（生成）都制定的相应的“**标准**”，并提供了相应的工具帮助开发者满足这些工程specs。 gofmt用于格式化代码，形成统一代码风格。 godoc.org用于查看标准库或repo的doc。 go-talks.appspot.com则是用来查看go slide。 像godoc和go-talks这种以服务形式提供文档查看的形式不得不...</description></item><item><title>使用core-vagrant方式安装CoreOS</title><link>https://tonybai.com/2015/07/20/install-coreos-by-coreos-vagrant/</link><pubDate>Mon, 20 Jul 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/07/20/install-coreos-by-coreos-vagrant/</guid><description>CoreOS是一种专门为运行类docker容器而生的linux发行版。与其他通用linux发行版（ubuntu、debian、redhat)相 比，它具有体型最小，消耗最小，支持滚动更新等特点。除此之外CoreOS内置的分布式系统服务组件也给开发者和运维者组建分布式集群、部署分布式服务应 用带来了极大便利。 CoreOS与知名容器Docker脚前脚后诞生，到目前为止已经较为成熟，国外主流云平台提供...</description></item><item><title>Go 1.5中值得关注的几个变化</title><link>https://tonybai.com/2015/07/10/some-changes-in-go-1-5/</link><pubDate>Fri, 10 Jul 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/07/10/some-changes-in-go-1-5/</guid><description>在GopherCon2015开幕之 际，Google Go Team终于放出了Go 1.5Beta1版本的安装包。在go 1.5Beta1的发布说明中，Go Team也诚恳地承认Go 1.5将打破之前6个月一个版本的发布周期，这是因为Go 1.5变动太大，需要更多时间来准备这次发布（fix bug, Write doc）。关于Go 1.5的变化，之前Go Team staff在各种golang技术...</description></item><item><title>使用consul实现分布式服务注册和发现</title><link>https://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/</link><pubDate>Mon, 06 Jul 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/</guid><description>Consul是HashiCorp公司推出的开源工具，用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案，比如 Airbnb的SmartStack等相比，Consul的方案更“一站式”，内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案，不再需要依赖其他工具（比如ZooKeeper等）。使用起来也较 为简单。Consul用Golang实...</description></item><item><title>Golang程序配置方案小结</title><link>https://tonybai.com/2015/07/01/config-solutions-for-golang-app/</link><pubDate>Wed, 01 Jul 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/07/01/config-solutions-for-golang-app/</guid><description>在Twitter上看到一篇关于Golang程序配置方案总结的系列文章（一个mini series，共6篇），原文链接：在这里。我觉得不错，这里粗略整理（非全文翻译）一下，供大家参考。 **一、背景** 无论使用任何编程语言开发应用，都离不开配置数据。配置数据提供的形式有多样，不外乎命令行选项(options)、参数（parameters)，环境 变量（env vars)以及配置文件等。Golang...</description></item><item><title>也谈并发与并行</title><link>https://tonybai.com/2015/06/23/concurrency-and-parallelism/</link><pubDate>Tue, 23 Jun 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/06/23/concurrency-and-parallelism/</guid><description>在一般人的眼中，“并行”就是并行，即你干你的，我干我的，两个“并行”的执行过程可能是两条毫无瓜葛的平行线，也可能是有交叉，但瞬即分开的两条线。不 过在程序员的世界里，有关“并行”的概念却有两个单词：Concurrency和Parallelism，对应的比较主流的中文翻译为并发 (Concurrency)和并行(Parallelism)。 之前一直使用C、Python进行Coding，对Concrr...</description></item><item><title>Appdash，用Go实现的分布式系统跟踪神器</title><link>https://tonybai.com/2015/06/17/appdash-distributed-systems-tracing-in-go/</link><pubDate>Wed, 17 Jun 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/06/17/appdash-distributed-systems-tracing-in-go/</guid><description>在“云”盛行的今天，分布式系统已不是什么新鲜的玩意儿。用脚也能想得出来：Google、baidu、淘宝、亚马逊、twitter等IT巨头 背后的巨型计算平台都是分布式系统了，甚至就连一个简单的微信公众号应用的后端也都分布式了，即便仅有几台机器而已。分布式让系统富有弹性，面 对纷繁变化的需求，可以伸缩自如。但分布式系统也给开发以及运维人员带来了难题：如何监控和优化分布式系统的行为。 以google为...</description></item><item><title>Caddy，一个用Go实现的Web Server</title><link>https://tonybai.com/2015/06/04/caddy-a-web-server-in-go/</link><pubDate>Thu, 04 Jun 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/06/04/caddy-a-web-server-in-go/</guid><description>这是一个Web Server的时代，apache2与nginx共舞，在追求极致性能的路上，没有最高，只有更高。但这又是一个追求个性化的时代，有些Web Server并没有去挤“Performance提升”这一独木桥，而是有着自己的定位，Caddy就是这样一个开源Web Server。 Caddy的作者Matt Holt在caddy官网以及FAQ中对caddy的目标阐释如下： 其他Web Serve...</description></item><item><title>ngrok原理浅析</title><link>https://tonybai.com/2015/05/14/ngrok-source-intro/</link><pubDate>Thu, 14 May 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/05/14/ngrok-source-intro/</guid><description>之前在进行微信Demo开发时曾用到过ngrok这个强大的tunnel(隧道)工具，ngrok在其github官方页面上的自我诠释是 “introspected tunnels to localhost&amp;#34;，这个诠释有两层含义： 1、可以用来建立public到localhost的tunnel，让居于内网主机上的服务可以暴露给public，俗称内网穿透。 2、支持对隧道中数据的introspection...</description></item><item><title>Go和HTTPS</title><link>https://tonybai.com/2015/04/30/go-and-https/</link><pubDate>Thu, 30 Apr 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/04/30/go-and-https/</guid><description>近期在构思一个产品，考虑到安全性的原因，可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP（使用Golang开 发微信系列）。对HTTPS的了解则始于那次自行搭建ngrok服务，在那个过程中照猫画虎地为服务端生成了一些私钥和证书，虽然结果是好 的：ngrok服务成功搭建起来了，但对HTTPS、数字证书等的基本原理并未求甚解。于是想趁这次的机会，对HTTPS做一些深度挖掘。...</description></item><item><title>Blog站点被黑以及问题解决过程</title><link>https://tonybai.com/2015/04/12/fix-hacked-blog-site/</link><pubDate>Sun, 12 Apr 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/04/12/fix-hacked-blog-site/</guid><description>记得前些日子，我在Blog评论里发现有人说我的Blog站点被黑： &amp;#34;YOUR SITE HAS BEEN HACKED – THERE ARE PARASITE PAGES IN http://tonybai.com/dl SECURE YOUR SITE!!!&amp;#34; 粗浅检查了一番，没有发现什么异常，也就没把这事当回事儿。 昨天上Gmail(由于需要搭梯子，不经常登录)，发现一位网友发来mail说我...</description></item><item><title>搭建自己的ngrok服务</title><link>https://tonybai.com/2015/03/14/selfhost-ngrok-service/</link><pubDate>Sat, 14 Mar 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/03/14/selfhost-ngrok-service/</guid><description>在国内开发微信公众号、企业号以及做前端开发的朋友想必对ngrok都不陌生吧，就目前来看，ngrok可是最佳的在内网调试微信服务的tunnel工 具。记得今年春节前，ngrok.com提供的服务还一切正常呢，但春节后似乎就一切不正常了。ngrok.com无法访问，ngrok虽然能连上 ngrok.com提供的服务，但微信端因为无法访问ngrok.com，导致消息一直无法发送到我们的服务地址上，比如x...</description></item><item><title>理解Golang包导入</title><link>https://tonybai.com/2015/03/09/understanding-import-packages/</link><pubDate>Mon, 09 Mar 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/03/09/understanding-import-packages/</guid><description>Golang使用包（package）这种语法元素来组织源码，所有语法可见性均定义在package这个级别，与Java 、python等语言相比，这算不上什么创新，但与C传统的include相比，则是显得“先进”了许多。 Golang中包的定义和使用看起来十分简单： 通过package关键字定义包： package xxx 使用import关键字，导入要使用的标准库包或第三方依赖包。 import ...</description></item><item><title>近期遇到的3个Golang代码问题</title><link>https://tonybai.com/2015/01/23/three-issues-about-go-code/</link><pubDate>Fri, 23 Jan 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/01/23/three-issues-about-go-code/</guid><description>这两周来业余时间都在用Golang写代码，现在处于这样一个状态：除了脚本，就是Golang了。反正能用golang实现的，都用golang写。 Golang语言相对成熟了，但真正写起来，还是要注意一些“坑”的，下面是这周遇到的三个问题，这里分享出来，希望能对遇到同样问题的童鞋有所帮助。 **一、误用定时器，狂占CPU** golang中有一个通过channel实现timeout或tick time...</description></item><item><title>一个有关Golang变量作用域的坑</title><link>https://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/</link><pubDate>Tue, 13 Jan 2015 00:00:00 +0800</pubDate><guid>https://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/</guid><description>临近下班前编写和调试一段Golang代码，但运行结果始终与期望不符，怪异的很，下班前依旧无果。代码Demo如下： //testpointer.go package main import (         &amp;#34;fmt&amp;#34; ) var p \*int func foo() (\*int, error) {         var i int = 5         return &amp;amp;i, nil } f...</description></item><item><title>使用Golang开发微信公众平台-发送客服消息</title><link>https://tonybai.com/2014/12/30/send-custom-service-text-msg-for-wechat-public-platform-dev-in-golang/</link><pubDate>Tue, 30 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/30/send-custom-service-text-msg-for-wechat-public-platform-dev-in-golang/</guid><description>关注并使用过微信“飞常准”公众号的朋友们都有过如下体验：查询一个航班情况后，这个航班的checkin、登机、起降等信息都会在后续陆续异步发给你，这个服务就是通过微信公众平台的客服消息实现的。 微信公众平台开发文档中关于客服消息的解释如下：“当用户主动发消息给公众号的时候（包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功 事件、用户维权），微信将会把消息数据推送给开发者，开发者在一段...</description></item><item><title>使用Golang开发微信公众平台-接收加密消息</title><link>https://tonybai.com/2014/12/24/recv-encrypted-text-msg-for-wechat-public-platform-dev-in-golang/</link><pubDate>Wed, 24 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/24/recv-encrypted-text-msg-for-wechat-public-platform-dev-in-golang/</guid><description>在上一篇“接收文本消息”一文中，我们了解到：公众服务与微信服务器间的消息是“裸奔”的（即明文传输，通过抓包可以看到）。显然这对于一些对安 全性要求较高的大企业服务号来说，比如银行、证券、电信运营商或航空客服等是不能完全满足要求的。于是乎就有了微信服务器与公众服务间的数据加密 通信流程。 公众号管理员可以在公众号“开发者中心”选择是否采用&amp;#34;安全模式&amp;#34;(区别于明文模式)： 一旦选择了“安全模式”，微信...</description></item><item><title>使用Golang开发微信公众平台-接收文本消息</title><link>https://tonybai.com/2014/12/20/receive-text-for-wechat-public-platform-dev-in-golang/</link><pubDate>Sat, 20 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/20/receive-text-for-wechat-public-platform-dev-in-golang/</guid><description>一旦接入验证成功，成为正式开发者，你可能会迫不及待地想通过手机微信发送一条&amp;#34;Hello, Wechat”到你的公众号服务器。不过上一篇的那个程序还无法处理手机提交的文本消息，本篇将介绍如何用Golang编写公众号程序来接收手机端发送的 文本消息以及回复响应消息。 根据微信公众平台开发文档中描述：“当普通微信用户向公众账号发消息时，微信服务器将POST消息的XML数据包到开发者填写的URL上”。我们...</description></item><item><title>使用Golang开发微信公众平台-接入验证</title><link>https://tonybai.com/2014/12/18/access-validation-for-wechat-public-platform-dev-in-golang/</link><pubDate>Thu, 18 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/18/access-validation-for-wechat-public-platform-dev-in-golang/</guid><description>今年我涉猎的领域有些“广泛”，并且有那么一点“跳跃”：从上半年的终端（游戏）开发到下半年golang、docker以及目前将要提及的微信公众平台 接口开发，似乎有些远离了老本行C以及技术管理的内容。但在这个转型以及创新驱动的时代，这显然是顺势而为。寻求与新兴领域的主动接轨，在实打实的实践 中，扩大了自己的视野，并可以进一步甄别发现适合自己的领域。 移动互联网时代，微信平台一枝独秀，是社交领域的巨人...</description></item><item><title>Goroutine是如何工作的</title><link>https://tonybai.com/2014/11/15/how-goroutines-work/</link><pubDate>Sat, 15 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/15/how-goroutines-work/</guid><description>在golangweekly的第36期Go Newsletter中我发现一篇短文&amp;#34;How Goroutines Work&amp;#34; ，其作者在参考了诸多资料后，简短概要地总结了一下 Goroutine的工作原理，感觉十分适合刚入门的Gophers（深入理解Goroutine调度的话，可以参考Daniel Morsing的&amp;#34; The Go scheduler&amp;#34; )。这里粗译如下。 **一、Go语言简介** 如...</description></item><item><title>Go语言的有效错误处理</title><link>https://tonybai.com/2014/11/14/effective-error-handling-in-go/</link><pubDate>Fri, 14 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/14/effective-error-handling-in-go/</guid><description>中午闲暇翻看Daniel Morsing的“The Go scheduler”时，发现其另外一篇短文“Effective error handling in Go”，文章不长，但感觉对Go中错误处理方法总结的还是比较到位的，这里译之供大家参考。 **一、简介** Go语言受到诟病最多的一项就是其错误处理机制。如果显式地检查和处理每个error，这恐怕的确会让人望而却步。你可以试试这里列出的几个方法...</description></item><item><title>Go，5周年</title><link>https://tonybai.com/2014/11/12/go-5-years/</link><pubDate>Wed, 12 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/12/go-5-years/</guid><description>2014年11月10日（美国当地时间），Golang的官方博客 放出了Andrew Gerrand的一篇博文《Half a decade with Go》来纪念Go语言发布五周年。文章按时间顺序简要描述了Golang这五年来发展的 点点滴滴，并让全世界Gopher看到了Go可期的光明未来。考虑到这篇文章在墙外，不便于国内Gopher阅读，这里给出中文翻译版，希望能给中国大陆 的Gophers带来些...</description></item><item><title>Golang开发环境搭建-Vim篇</title><link>https://tonybai.com/2014/11/07/golang-development-environment-for-vim/</link><pubDate>Fri, 07 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/07/golang-development-environment-for-vim/</guid><description>虽说sublimetext3+gosublime+gocode是目前较为 流行的Golang开发环境组合，但作为一名VIMer，没有一套得心应手的Vim for Golang dev心里总是过不去的。Golang虽然年轻，但即便是从Go 1版本发布(2012年3月28日)算起，掐指算来也有小三年了。全世界的开发者已经为Golang贡献了较为成熟的Vim插件了。有了这些插件，搭建出 一套高效的Gol...</description></item><item><title>Go语言是如何处理栈的</title><link>https://tonybai.com/2014/11/05/how-stacks-are-handled-in-go/</link><pubDate>Wed, 05 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/05/how-stacks-are-handled-in-go/</guid><description>Go 1.4Beta1刚刚发布，在Go 1.4Beta1中，Go语言的stack处理方式由之前的&amp;#34;segmented stacks&amp;#34;改为了&amp;#34;continuous stacks&amp;#34;。关于Go语言对stack的处理机制、发展历史、存在问题等，CloudFlare的一篇官方blog进行了系统的阐述，这里的内容就是 翻译自CloudFlare的那篇blog：《How Stacks are Handled i...</description></item><item><title>Go 1.4中值得关注的几个变化</title><link>https://tonybai.com/2014/11/04/some-changes-in-go-1-4/</link><pubDate>Tue, 04 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/04/some-changes-in-go-1-4/</guid><description>在Go 1.3发布半年过去后，Go核心项目组于本月初发布了Go 1.4 Beta1版本。这个版本的几个变化点虽然不是革命性的，但对后续Go语言的发展来说，打下了基础，定下了基调。这里就几个值得关注的变化点结合Go 1.4代码进行一些简单描述，希望大家能对Go 1.4有个感性的认知和了解。 Go 1.4依旧保持了Go 1兼容性的承诺，你的已有代码几乎无需任何改动就可以通过Go 1.4的编译并运行。(...</description></item><item><title>Wordpress迁移到Docker容器</title><link>https://tonybai.com/2014/11/01/migrate-wordpress-into-docker-container/</link><pubDate>Sat, 01 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/01/migrate-wordpress-into-docker-container/</guid><description>目前的Blog托管在同事的一个共享主机上，由于种种原因，这个主机即将无法使用，我只能再次迁移我的WordPress，不得不感叹：铁打的Wordpress，流水的主机啊！ 这次迁移前，我仔细考量了一番，如何能让以后可能出现的Wordpress迁移最简化呢？虽然现在的迁移也不是特别复杂。我想到了近期研究的 Docker。目前很多国外的VPS都已经支持了Docker，我只需要在本地制作好Docker容器...</description></item><item><title>godep的一个“坑”</title><link>https://tonybai.com/2014/10/30/a-hole-of-godep/</link><pubDate>Thu, 30 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/30/a-hole-of-godep/</guid><description>很多人学习和使用Golang一段时间后，都会被golang的第三方包依赖版本搞得有些烦躁，golang设计者最初过于乐观的设计使得今天大 家不得不各自想办法解决这个问题。godep就是综合了多年第三方包依赖问题的解决方案后的一个趋向统一的方案，至少是在go get的设计没有进化前的一个比较不错的方案。 今天试用了一把godep，不过“体验”并不理想，这缘于我遇到了godep的一个“坑”，不过是那种...</description></item><item><title>VirtualBox虚拟机下Windows登录密码破解方法</title><link>https://tonybai.com/2014/10/29/crack-windows-logon-password-under-virtualbox/</link><pubDate>Wed, 29 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/29/crack-windows-logon-password-under-virtualbox/</guid><description>近两年虚拟机的发展给开发人员带来了极大便利，安装一个新环境，只需从别人那里copy一份虚拟机文件即可，分分钟搞定。我之前一直在Ubuntu下工 作，Windows偶尔使用，于是在Ubuntu VirtualBox下安装了一个Windows 7。今年将工作环境迁移到Mac Air下了，但偶尔也有Windows的使用需求，于是直接从我原来的Ubuntu下将Win7的Vdi文件Copy到Air上，便直接...</description></item><item><title>Golang的演化历程</title><link>https://tonybai.com/2014/10/25/golang-history/</link><pubDate>Sat, 25 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/25/golang-history/</guid><description>本文来自Google的Golang语言设计者之一Rob Pike大神在GopherCon2014大会上的开幕主题演讲资料“Hello, Gophers!”。Rob大神在这次分 享中用了两个生动的例子讲述了Golang的演化历程，总结了Golang到目前为止的成功因素，值得广大Golang Programmer &amp;amp; Beginner学习和了解。这里也用了&amp;#34;Golang的演化历程&amp;#34;作为标题。 **1、...</description></item><item><title>Golang测试技术</title><link>https://tonybai.com/2014/10/22/golang-testing-techniques/</link><pubDate>Wed, 22 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/22/golang-testing-techniques/</guid><description>本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”，即介绍使用Golang开发 时会使用到的测试技术（主要针对**单元测试**），包括基本技术、高级技术（并发测试、mock/fake、竞争条件测试、并发测试、内/外部测 试、vet工具等）等，感觉总结的很全面，这里整理记录下来，希望能给大家带...</description></item><item><title>组织Golang代码</title><link>https://tonybai.com/2014/10/21/organize-golang-code/</link><pubDate>Tue, 21 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/21/organize-golang-code/</guid><description>本月初golang官方blog(需要自己搭梯子)上发布了一篇文章，简要介绍了近几个月Go在一 些技术会议上（比如Google I/O、Gopher SummerFest等）的主题分享并伴有slide链接。其中David Crawshaw的“Organizing Go Code”对Golang的代码风格以及工程组 织的最佳实践进行的总结很是全面和到位，这里按Slide中的思路和内容翻译和摘录如下（部...</description></item><item><title>Golang跨平台交叉编译</title><link>https://tonybai.com/2014/10/20/cross-compilation-with-golang/</link><pubDate>Mon, 20 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/20/cross-compilation-with-golang/</guid><description>近期在某本书上看到Go跨平台交叉编译的强大功能，于是想自己测试一下。以下记录了测试过程以及一些结论，希望能给大家带来帮助。 我的Linux环境如下： uname -a Linux ubuntu-Server-14 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86\_64 x86\_64 x86\_64 GNU/Lin...</description></item><item><title>探讨Docker容器中修改系统变量的方法</title><link>https://tonybai.com/2014/10/14/discussion-on-the-approach-to-modify-system-variables-in-docker/</link><pubDate>Tue, 14 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/14/discussion-on-the-approach-to-modify-system-variables-in-docker/</guid><description>探讨完Docker对共享内存状态持久化的支持状况后，我将遗留产品build到一个pre-production image中，测试启动是否OK。很显然，我过于乐观了，Docker之路并不平坦。我收到了shmget报出的EINVAL错误码，提示参数非法。 shmget的manual对EINVAL错误码的说明如下： EINVAL： A  new  segment  was  to  be  create...</description></item><item><title>探讨docker容器对共享内存的支持情况</title><link>https://tonybai.com/2014/10/12/discussion-on-shared-mem-support-in-docker/</link><pubDate>Sun, 12 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/12/discussion-on-shared-mem-support-in-docker/</guid><description>我们的遗留系统广泛使用了性能最佳的IPC方式 – 共享内存，而且用到了两种共享内存的实现方式：System V共享内存(shmget、shmat、shmdt)以及Mmap映射Regular File。System V共享内存支持一定程度上的内存数据持久化，即当程序创建共享内存对象后，如果不显式删除或物理主机重启，该IPC对象会一直保留，其中的数据也不会丢 失；mmap映射Regular File的...</description></item><item><title>docker容器内服务程序的优雅退出</title><link>https://tonybai.com/2014/10/09/gracefully-shutdown-app-running-in-docker/</link><pubDate>Thu, 09 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/09/gracefully-shutdown-app-running-in-docker/</guid><description>近期在试验如何将我们的产品部署到docker容器中去，这其中涉及到一个技术环节，那就是如何让docker容器退出时其内部运行的服务程序也 可以优雅的退出。所谓优雅退出，指的就是程序在退出前有清理资源（比如关闭文件描述符、关闭socket），保存必要中间状态，持久化内存数据 （比如将内存中的数据flush到文件中）的机会。docker作为目前最火的轻量级虚拟化技术，其在后台服务领域的应用是极其广泛的...</description></item><item><title>Golang Channel用法简编</title><link>https://tonybai.com/2014/09/29/a-channel-compendium-for-golang/</link><pubDate>Mon, 29 Sep 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/09/29/a-channel-compendium-for-golang/</guid><description>在进入正式内容前，我这里先顺便转发一则消息，那就是Golang 1.3.2已经正式发布了。国内的golangtc已经镜像了golang.org的安装包下载页面，国内go程序员与爱好者们可以到&amp;#34;Golang中 国&amp;#34;，即golangtc.com去下载go 1.3.2版本。 Go这门语言也许你还不甚了解，甚至是完全不知道，这也有情可原，毕竟Go在TIOBE编程语言排行榜上位列30开外。但近期使用Gola...</description></item><item><title>Ubuntu Server 14.04安装docker</title><link>https://tonybai.com/2014/09/26/install-docker-on-ubuntu-server-1404/</link><pubDate>Fri, 26 Sep 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/09/26/install-docker-on-ubuntu-server-1404/</guid><description>近期在研究docker这一轻量级容器引擎，研究docker对日常开发测试工作以及产品部署运维工作能带来哪些便利。前些时候刚刚将工作环境从 Ubuntu搬到了Mac Air上，对Mac OS X的一切均不甚熟悉，给docker研究带来了不便，于是打算在VirtualBox中安装一Ubuntu Server作为docker之承载平台。这里记录一下安装配置过程，主要为了备忘，如果能给其他人带来帮助，我会...</description></item><item><title>Cocos2d-x集成Amazon内购和GameCircle服务</title><link>https://tonybai.com/2014/08/04/amazon-inapp-purchasing-and-gamecirle-in-cocos2dx/</link><pubDate>Mon, 04 Aug 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/08/04/amazon-inapp-purchasing-and-gamecirle-in-cocos2dx/</guid><description>由于种种原因，这篇文章已经拖延了N多时间了。今天花了些时间把如何在Cocos2d-x(我用的版本是2.2.2)游戏中集成Amazon的内购和GameCircle服务(仅适用于Android版本)整理一下，发出来，作备忘。 之前在做“手指足球世界杯2014”时，想给这款小游戏加上内购(In-App Purchasing)和积分榜(ScoreBoard)功能。说到Android手机游戏的内购，人们第一...</description></item><item><title>Cocos2d-x屏幕适配之Sprite绘制原理</title><link>https://tonybai.com/2014/05/13/sprite-draw-principles-of-cocos2dx-screen-adaptation/</link><pubDate>Tue, 13 May 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/05/13/sprite-draw-principles-of-cocos2dx-screen-adaptation/</guid><description>手机(智能终端)游戏绝大多数为全屏(Full Screen)显示，这样开发人员在制作游戏时势必要考虑不同手机(智能终端）屏幕大小、宽高比的不同给游戏画面带来的影响，并且要将这种影响降低到最 小，努力使用不同终端的游戏玩家拥有几乎相同的游戏画面体验。为此各种游戏引擎在屏幕适配方面都给出了自己的方案，Cocos2d-x也不例外。 在Cocos2d-x官网Wiki上特地撰写了一篇讲解Cocos2d-x多...</description></item><item><title>Cocos2d-x 3.0rc0集成Google AdMob SDK</title><link>https://tonybai.com/2014/05/01/integrate-cocos2dx3rc0-with-admob/</link><pubDate>Thu, 01 May 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/05/01/integrate-cocos2dx3rc0-with-admob/</guid><description>话说Cocos2d-x 3.0上一周迫不及待地发布了正式版，本是一件值得庆幸的事情。但由于不可解决的技术问题，引擎无奈将Android平台的NativeActivity 实现重新回退到了Cocos2d-x 2.2.x版本的实现方案。由于之前已经将 GameDemo移植到了Cocos2d-x 3.0rc0版，直观感受到了NativeActivity方案带来的游戏操作体验上的提升（触屏事件的响应），因...</description></item><item><title>Cocos2d-x 3.0多线程异步资源加载</title><link>https://tonybai.com/2014/04/28/multithreaded-resource-loading-in-cocos2dx-3/</link><pubDate>Mon, 28 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/28/multithreaded-resource-loading-in-cocos2dx-3/</guid><description>Cocos2d-x从2.x版本到上周刚刚才发布的Cocos2d-x 3.0 Final版，其引擎驱动核心依旧是一个单线程的“死循环”，一旦某一帧遇到了“大活儿”，比如Size很大的纹理资源加载或网络IO或大量计算，画面将 不可避免出现卡顿以及响应迟缓的现象。从古老的Win32 GUI编程那时起，Guru们就告诉我们：别阻塞主线程(UI线程)，让Worker线程去做那些“大活儿”吧。 手机游戏，即便...</description></item><item><title>Cocos2d-x 3.0rc2集成ShareSDK</title><link>https://tonybai.com/2014/04/25/integrate-cocos2dx3rc2-with-sharesdk/</link><pubDate>Fri, 25 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/25/integrate-cocos2dx3rc2-with-sharesdk/</guid><description>给自己的手机游戏增加些社交分享功能，有助于游戏宣传和提升知名度，是一种不错的社交营销手段。国内这方面的第三方插件有不少，比如ShareSDK、友 盟分享组件、Baidu分享组件等，之前在研究2.2.2版本时，集成了ShareSDK这个组件，这次迁移到Cocos2d-x 3.0rc2依旧选择集成ShareSDK，这里就来说说集成的过程，遇到的一些问题以及解决方法。这里仅以Android平台游戏集成为...</description></item><item><title>Cocos2d-x 3.0rc2针对Android平台的变动</title><link>https://tonybai.com/2014/04/23/changes-in-cocos2dx-3-rc2-for-android/</link><pubDate>Wed, 23 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/23/changes-in-cocos2dx-3-rc2-for-android/</guid><description>《Hello, Cocos2d-x 3.0》一文发出后没多久，我就迫不及待地将手头的一个习作尝试从2.2.2版本迁移到3.0rc0引擎上。 核心代码迁移相对顺利，大致流程如下： **\* 创建项目** 1) cd cocos2d-x-3.0rc0；     2) 执行setup.py，设置引擎依赖的环境变量，脚本会将COCOS\_CONSOLE\_ROOT和ANT\_ROOT写入到~/.bash\...</description></item><item><title>Hello, Cocos2d-x 3.0rc0</title><link>https://tonybai.com/2014/04/22/hello-cocos2dx-3-rc0/</link><pubDate>Tue, 22 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/22/hello-cocos2dx-3-rc0/</guid><description>Cocos2d-x 3.0版本已经发布了rc2，这让这段时间用熟了Cocos2d-x 2.2.2的我也有些蠢蠢欲动。按照触控科技主创人员在CocoaChina2014大会上的讲解，Cocos2d-x 3.0版本相比2.x版本在各方面都有不错的提升，于是乎就想把手头上的一款习作移植到3.0版本引擎下，看看运行效果如何。不过在移植之前，我先来看看 3.0与2.0相比在整体代码结构以及引擎驱动核心方面到...</description></item><item><title>ShareSDK Cocos2d-x专用组件的一个Bug</title><link>https://tonybai.com/2014/04/17/a-bug-from-sharesdk-componet-for-cocos2dx/</link><pubDate>Thu, 17 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/17/a-bug-from-sharesdk-componet-for-cocos2dx/</guid><description>近期研究了一下Game App做社交分享，最后选择了ShareSDK来集成，不仅是因为ShareSDK支持国内外主流社交平台，更重要的是ShareSDK提供了专门的 cocos2d-x集成方案，有专门的文档和代码Demo供开发者参考。 文档中提到了三种集成方式：纯Java方式、plugin-x方式以及Cocos2d-x专用组件方式，这里选择了ShareSDK Cocos2d-x专用组件（v2.3....</description></item><item><title>Cocos2d-x内存管理-绕不过去的坎</title><link>https://tonybai.com/2014/03/18/cocos2dx-memory-management/</link><pubDate>Tue, 18 Mar 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/03/18/cocos2dx-memory-management/</guid><description>Cocos2d-x引擎的核心是用C++编写的，那对于所有使用该引擎的游戏开发人员来说，内存管理是一道绕不过去的坎。 关于Cocos2d-x内存管理，网上已经有了许多参考资料，有些资料写的颇为详实，因为在内存管理这块我不想多费笔墨，只是更多的将思路描述清 楚。 **一、对象内存引用计数** Cocos2d-x内存管理的基本原理就是对象内存引用计数，Cocos2d-x将内存引用计数的实现放在了顶层父类...</description></item><item><title>Hello, Cocos2d-x</title><link>https://tonybai.com/2014/03/11/hello-cocos2dx/</link><pubDate>Tue, 11 Mar 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/03/11/hello-cocos2dx/</guid><description>女儿从两岁半开始接触iPad，在这个年龄段也只有一些幼教类游戏适合她玩。虽然知道iPad玩久了对视力有伤害，但有时候还真拗不过果果，索性 也就让她玩一会儿。之前对智能终端上的东西不是很在意，也没啥兴趣，这大概与当年在大学时做Win32 GUI开发的糟糕经历多多少少有点关系。不过智能终端是大势所趋，历史的潮流不能违抗。虽然自己并非以Android/iOS编程为主业，但适当学习学习 总归没有坏处，万一...</description></item><item><title>只为那一抹释然</title><link>https://tonybai.com/2013/12/26/just-for-being-relieved/</link><pubDate>Thu, 26 Dec 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/12/26/just-for-being-relieved/</guid><description>_一切没有目标的努力，都是瞎忙活儿。_                                                     _\- Tony Bai_ 刚实施回来，就又投入到新工作中，到今天才有那么一点点时间写写这件事儿。 **\* 缘起** 我们的遗留系统性能一直不高，导致这一局面的因素有很多，比如最初设计和实现的“考虑不足”、后续维护人员的“随波逐流”甚至缺少勇气对影响性能...</description></item><item><title>Recommended C Style and Coding Standards中文版全文</title><link>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</link><pubDate>Tue, 26 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</guid><description>今天无意中打开了托管在Google Code上的“Recommended C Style and Coding Standards”翻译项目，忽感觉通过目录链接的方式查看译文缺少整体感，于是花了点时间将译文全文以single page的形式贴在博客里面，方便大家查看，也算是对该翻译内容的一个备份吧。 **C语言编码风格和标准** **0\. 摘要** 本文翻译自《Recommended C Sty...</description></item><item><title>Memcached CAS应用一例</title><link>https://tonybai.com/2013/11/01/a-case-of-applying-memcached-cas/</link><pubDate>Fri, 01 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/01/a-case-of-applying-memcached-cas/</guid><description>近期收到客户一个需求，我将该需求转述为下面这个等价的问题。 **【问题】** \* 有一个产品包装系统_S_，为某种产品_P_提供产品包装服务; \* 系统_S_由若干个处理节点组成，每个节点都可以单独处理组件; \* 产品_P_的一个可出厂的**成品**由包装盒+N个产品组件组成，包装盒与产品组件上都贴有一个标签，该标签上包含该成品的唯一编号ID（一定时间范围内有效）、每个组件自己的序号(uni...</description></item><item><title>为阻塞型函数调用添加超时机制</title><link>https://tonybai.com/2013/10/25/add-timeout-to-blocking-function-call/</link><pubDate>Fri, 25 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/25/add-timeout-to-blocking-function-call/</guid><description>我们产品中的一个子模块在进行Oracle实时数据库查询时，常常因数据库性能波动或异常而被阻塞在OCI API的调用上，为此我们付出了“惨痛”的代价。说来说去还是我们的程序设计的不够完善，在此类阻塞型函数调用方面缺少微小粒度的超时机制。 调用阻塞多发生在I/O操作（磁盘、网络、低速设备）、第三方API调用等方面。对于文件/网络I/O操作，我们可利用在非阻塞文件描述符上select /poll的超时机...</description></item><item><title>关于编程语言学习的一些体会</title><link>https://tonybai.com/2013/10/22/some-experience-about-learning-programming-language/</link><pubDate>Tue, 22 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/22/some-experience-about-learning-programming-language/</guid><description>_Learn at least one _new language every year_.                                               — Andy Hunt and Dave Thomas_ 自己一直是“每年学习一门新语言”的忠实拥趸，曾先后认真地学习了Haskell、Common Lisp、Python、Go等语言，对Prolog、Scala、...</description></item><item><title>当Bug A遇到Bug B</title><link>https://tonybai.com/2013/10/14/when-bug-a-encounter-bug-b/</link><pubDate>Mon, 14 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/14/when-bug-a-encounter-bug-b/</guid><description>_2002年的Bug A与2008年的Bug B同时穿越到2013年，并在某个场合相遇了。_ 上周六，项目组本应以一个愉快的心情结束一天的工作的，但一个2002年的Bug A与另外一个2008年的Bug B同时穿越时空来到了2013年，并且恰恰在那时那刻（下班前）相遇了，于是项目组由放松变成了忙碌，由愉快变成了紧张，17：30的下班点也因此延迟到了凌晨1：30。 Bug A来源于2002年我们发布...</description></item><item><title>把所有东西都放入版本控制系统</title><link>https://tonybai.com/2013/09/04/putting-absolutely-everything-in-version-control/</link><pubDate>Wed, 04 Sep 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/09/04/putting-absolutely-everything-in-version-control/</guid><description>本文翻译自Dr. Dobb’s杂志主编Andrew Binstock的&amp;#34;Putting Absolutely Everything in Version Control&amp;#34;一文。 **持续交付(Continuous Delivery)的一个关键原则就是将所有东西都放入版本控制系统中。这解决了一些重大问题，但也引入了一些其他问题。** 持续交付是持续集成(CI)的一个自然扩展。后者旨在每次代码签入后运...</description></item><item><title>利用ZooKeeper服务实现分布式系统的配置数据同步</title><link>https://tonybai.com/2013/08/28/implement-config-sync-for-distributed-system-with-zookeeper-services/</link><pubDate>Wed, 28 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/28/implement-config-sync-for-distributed-system-with-zookeeper-services/</guid><description>_很多时候，一旦习惯了某些事情，也就习惯了它们的恶劣，习惯了它们的丑陋，习惯了它们“赋予”你的各种痛苦。                                                                                                                                                    ...</description></item><item><title>利用ZooKeeper服务实现分布式系统的Leader选举</title><link>https://tonybai.com/2013/08/23/leader-election-using-zookeeper/</link><pubDate>Fri, 23 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/23/leader-election-using-zookeeper/</guid><description>每次与Java组的同事们坐下来谈技术、谈理想、谈人生时，Java组的同事总会向我们投来羡慕的眼光：卧槽！又是自己开发的工具，太NB了。这时C程序 员们的脸上就会洋溢出自豪的笑容，然后内心骂道：谁让我们没有现成的呢。另一个空间里的某些“无C不欢”们或者某些“C Guru”们会骂道：靠，有了也不用，自己写！ 有时候，C程序员真的有一种下意识：不情愿使用其他语言开发的工具、框架或服务，且比其他程序员更爱...</description></item><item><title>Ubuntu 12.04修复记</title><link>https://tonybai.com/2013/08/07/ubuntu-12-04-repairing-notes/</link><pubDate>Wed, 07 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/07/ubuntu-12-04-repairing-notes/</guid><description>今天一早发现Ubuntu 12.04坏掉了，于是用了大半天对其做了修复，修复过程十分坎坷，但结果还不错，遂记之以备忘。 **\* 毁掉Ubuntu** Ubuntu坏掉完全是由于我的错误决策。昨天一天Ubuntu桌面右上方的状态拦一直有一个红色的错误提示符，提示系统包冲突，建议执行sudo apt-get install -f解决。apt-get也提示索引冲突，无法卸载和安装任何包。于是执行了su...</description></item><item><title>也谈代码行统计</title><link>https://tonybai.com/2013/07/24/thoughts-about-lines-of-code-statistics/</link><pubDate>Wed, 24 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/24/thoughts-about-lines-of-code-statistics/</guid><description>一直在纠结要不要就这个话题写点什么，之前梳理过一些思路，但感觉这个题目似乎没什么大意义。不过将东西憋在肚子里的滋味总是不好受的，最终我还是选择写出来一些，即便它真的没有什么意义^\_^。 事情缘于近期领导让我负责的一个内部任务：制定组织内的代码行统计标准并实现标准化的工具。就是这个任务促使了我对代码行统计重新做了一番考量。 **对代码行统计的理解** 代码行统计这个活动不是软件开发过程中的关键路径...</description></item><item><title>给新手程序员的建议</title><link>https://tonybai.com/2013/07/18/advice-to-a-new-programmer/</link><pubDate>Thu, 18 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/18/advice-to-a-new-programmer/</guid><description>本文翻译自Dr. Dobb’s杂志主编Andrew Binstock的&amp;#34;Advice to a new programmer&amp;#34;一文**。** **总是有太多的建议摆在新手程序员面前，以致他们难于选择从何处开始。然而，所有这些建议都是建构在下面这五条实践的基础之上的。** 每隔几个月，我就会收到一些勤奋有加的新手程序员的求助，他们希望知道如何才能成为一名真正优秀的程序员。在一些程序员论坛上，我也能看...</description></item><item><title>buildc 0.3.1版本发布</title><link>https://tonybai.com/2013/07/15/buildc-0-3-1-release/</link><pubDate>Mon, 15 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/15/buildc-0-3-1-release/</guid><description>随着buildc在内部应用的深入，buildc逐渐进入了以内部需求和问题为主要驱动力的演化模式。我们内部的C应用多是后端服务类应用，个人 觉得具有一定代表性。buildc最初就是为了针对这类C应用而设计的。因此我们内部的需求和问题应该也同样具有一定代表性，而这种演化模式在一 段时间范围内还是有意义的。 buildc 0.3.1版本修正了上一版本的若干bug，并增加了两个新功能。 **\* 提高容错...</description></item><item><title>Python脚本命令行变量的实现</title><link>https://tonybai.com/2013/07/09/an-implementation-of-python-commandline-variables/</link><pubDate>Tue, 09 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/09/an-implementation-of-python-commandline-variables/</guid><description>我们知道Make工具是支持命令行变量的，这种手段为我们提供了很好的灵活性，我们可以通过敲入不同的命令行参数来决定Makefile脚本的行为。 make \[variable1=value1 variable2=value2 ... ... \]。 \Makefile CMODE = 64-bit ifeq ($(CMODE), 64-bit)     CFLAGS += -m64 endif al...</description></item><item><title>代码评审，由人治过渡到“法治”</title><link>https://tonybai.com/2013/07/08/code-review-from-rule-of-man-to-rule-of-law/</link><pubDate>Mon, 08 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/08/code-review-from-rule-of-man-to-rule-of-law/</guid><description>事实证明：有效的代码评审(Code Review，也有叫代码审查的），对保证代码质量具有十分重要的作用。因此这两年来我一直尝试着在这块不断改进和完善，以期望能形成一套合理、规范、有 效且高效的代码评审流程，这包括引入在线代码评审系统、走查和在线评审结合、规范评审Request的规模与有效性、设立评审专员等，用心不可谓不良苦 ^\_^。大家也的确形成了及时提交Code Review Request或...</description></item><item><title>跨过BUG查找的"最后一公里"</title><link>https://tonybai.com/2013/06/18/walk-through-the-last-mile-of-bugfix/</link><pubDate>Tue, 18 Jun 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/06/18/walk-through-the-last-mile-of-bugfix/</guid><description>_如果你看到一个C程序员在通宵熬夜神情紧张地对着电脑敲代码或阅读代码，多数只有两种可能：一是为了赶进度；二就是查找内存Bug。_                                                                                                                               _— 个人感悟_ ...</description></item><item><title>《Understanding and Using C Pointers》要点先睹为快</title><link>https://tonybai.com/2013/05/28/understanding-and-using-c-pointers-keypoint-preview/</link><pubDate>Tue, 28 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/28/understanding-and-using-c-pointers-keypoint-preview/</guid><description>_如果你问十个C程序员：你觉得C语言的核心是什么？这十个程序员都会回答：指针。_ 指针具备成为C语言核心的两个关键要素：**强大**与**争议**。 \* **指针的强大**源自于其天生与机器内存模型的适配。使用指针让代码紧凑，并可获得仅次于汇编代码的执行效率；使用指针可以让C程 序员毫不费力地尽情操纵着内存中的每个byte甚至是bit；使用指针可以为C程序员提供无与伦比的操作灵活性。总之，在C语...</description></item><item><title>再谈C语言位域</title><link>https://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/</link><pubDate>Tue, 21 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/</guid><description>我在日常工作中使用C语言%E2%80%8E)中的位域(bit field)的场景甚少，原因大致有二： \* 一直从事于服务器后端应用的开发，现在的服务器的内存容量已经达到了数十G的水平，我们一般不需要为节省几个字节而使用内存布局更加紧凑的位域。 \* 结构体中位域的实现是平台相关或Compiler相关的，移植性较差，我们不会贸然地给自己造“坑”的。 不过近期Linux技术内核社区（www.linu...</description></item><item><title>buildc 0.3.0版本发布</title><link>https://tonybai.com/2013/05/11/buildc-0-3-0-release/</link><pubDate>Sat, 11 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/11/buildc-0-3-0-release/</guid><description>自buildc正式在项目中应用以来，我们收到了许多同事针对buildc演进的意见和建议。其中确实有些易用性的问题是在最初设计时未考虑周全的，尤其是.buildc.rc中的配置，同事们对该文件的配置已经“怨声载道”了。 .buildc.rc是用来配置某开发者在开发过程中使用的第三方库所在subversion repository信息的，例如： a\_repository = (&amp;#39;SVN库地址&amp;#39;, &amp;#39;...</description></item><item><title>也谈Commit log</title><link>https://tonybai.com/2013/05/09/also-talk-about-commit-log/</link><pubDate>Thu, 09 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/09/also-talk-about-commit-log/</guid><description>在版本控制工具大行其道的今天，作为程序员，势必要每天与各种版本控制系统（比如Subversion、Git、Mercurial等）打交道， 每天不commit几次代码都不好意思说自己是专业程序员^\_^。不过commit代码可不止敲入commit命令这么简单，对于一个专业程序员 来说，我们还要关注每次commit所携带的背景信息，这里暂且称之为“commit context”。在每次commit时，...</description></item><item><title>libiconv库链接问题一则</title><link>https://tonybai.com/2013/04/25/a-libiconv-linkage-problem/</link><pubDate>Thu, 25 Apr 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/04/25/a-libiconv-linkage-problem/</guid><description>与在Solaris系统上不同，Linux的libc库中包含了libiconv库中函数的定义，因此在Linux上使用libiconv库相关函数，编译时是不需要显式-liconv的。但最近我的一位同事在某redhat enterprise server 5.6机器上编译程序时却遇到了找不到iconv库函数符号的链接问题，到底是怎样一回事呢？这里分享一下问题查找过程。 **一、现场重现** 这里借用一下...</description></item><item><title>C,C++开源项目中的100个Bugs</title><link>https://tonybai.com/2013/04/10/100-bugs-in-c-cpp-opensource-projects/</link><pubDate>Wed, 10 Apr 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/04/10/100-bugs-in-c-cpp-opensource-projects/</guid><description>俄罗斯OOO Program Verification Systems公司用自己的静态源码分析产品PVS-Studio对一些知名的C/C++开源项目，诸如Apache Http Server、Chromium、Clang、CMake、MySQL等的源码进行了分析，找出了100个典型的Bugs。个人觉得这份列表对C/C++ 程序员有一定参考意义。与其说事后用静态工具分析，倒不如在编码时就提高自知自觉...</description></item><item><title>Hello，Sublime Text 2</title><link>https://tonybai.com/2013/04/01/hello-sublime-text-2/</link><pubDate>Mon, 01 Apr 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/04/01/hello-sublime-text-2/</guid><description>用惯了Vim后，也会有一种尝试新Editor的冲动，这回Sublime Text 2满足了我的这个需求。据说Sublime Text是目前最火的代码编辑器之一，我周围为数不多的几个比较Geek的同事都已经开始使用Sublime Text 2或用了很长时间了，其官方网站首页的Feature Demo也的确非常地炫。 **安装Sublime Text 2** 我的实验环境Ubuntu 12.04.1 ...</description></item><item><title>简析指针与多维数组</title><link>https://tonybai.com/2013/03/28/pointer-and-multi-dimension-array-in-c/</link><pubDate>Thu, 28 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/28/pointer-and-multi-dimension-array-in-c/</guid><description>上一篇文章中对多级指针做了简要分析，其实只有当指针与多维数组以及函数联合在一起使用时，麻烦才算真正到来。 **零、数组****与数组名** C语言)中的数组的一般声明形式如下： T arr\_name\[n\]; /\* T为类型，n为数组元素个数 \*/ 从**内存布局**角度来说，数组T arr\_name\[n\]就是内存中连续的内存单元，每个内存单元的长度为sizeof(T)，数组的起始内...</description></item><item><title>简析多级指针解引用</title><link>https://tonybai.com/2013/03/23/multi-dimension-pointer-in-c/</link><pubDate>Sat, 23 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/23/multi-dimension-pointer-in-c/</guid><description>指针是C语言)中公认的最为强大的语法要素，但同时也是最难理解的语法要素，它曾给程序员带来了无数麻烦和痛苦，以致于在C语言之后诞生的很多新兴 语言中我们再也难觅指针的身影了。 下面是一个最简单的C语言指针的例子： int a = 5; int \*p = &amp;amp;a; 其中p就是一个指针变量。如果C语言中仅仅存在这类指针，那显然指针不会形成“大患”。经常地我们会在代码中看到下面的情形： int \*\*q...</description></item><item><title>一种基于内存映射文件的系统运行数据提取方法</title><link>https://tonybai.com/2013/03/18/sys-running-data-extraction-method-using-mmap/</link><pubDate>Mon, 18 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/18/sys-running-data-extraction-method-using-mmap/</guid><description>这是我无意中想到的一个方法，估计这个方法已经不是什么新鲜的东西了，很可能在类似的问题场景中早已经被使用了。不过这里还是要说说我的思维过程。 近期在学习一些Linux性能查看和分析方面的工具，比如top、iostat、vmstat以及sar等。在学习过程中我发现这些工具有个共同的特点，那就是她们采集的Linux运行数据都是从/proc下的文件中实时获取并计算而得出的。众所周知，/proc是Linux...</description></item><item><title>SVN命令输出结果的语言选择</title><link>https://tonybai.com/2013/03/15/choose-lang-for-svn-cmd-output/</link><pubDate>Fri, 15 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/15/choose-lang-for-svn-cmd-output/</guid><description>今天一位网上的朋友在使用reviewboard时遇到了问题，我们在评论中探讨了一下。他的问题目前已经定位，大致是这样的：他在Windows上用svn diff生成的patch文件在提交给reviewboard时出错，但在linux上生成的patch文件是没有问题的。后来他发现这两个patch文件内容稍有区别：Windows上的patch文件中的diff结果包含中文，比如“版本 10”；而在linu...</description></item><item><title>也谈C语言的Struct Hack</title><link>https://tonybai.com/2013/03/07/struct-hack-in-c/</link><pubDate>Thu, 07 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/07/struct-hack-in-c/</guid><description>今天在浏览网友huangz编写的“Redis源码分析”时，看到如下redis中的代码： struct sdshdr {     int len;     int free;     char buf\[\]; }; 说实话，这类代码我见过很多，但直到这次我才知道这种coding trick的真实英文称谓是：Struct Hack。 到底什么是Struct Hack？其实倒也没有什么明确定义。首先它...</description></item><item><title>玩转top</title><link>https://tonybai.com/2013/03/02/deep-into-top/</link><pubDate>Sat, 02 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/02/deep-into-top/</guid><description>相信很多人和我一样，top是自己日常使用最多的linux资源查看工具。不过仅限于一些简单的日常场景罢了：敲入top命令，看看哪些进程占用 CPU较多，然后对这些CPU占用较多的进程逐一处理一下。显然这样使用top有些大才小用了。 以前在监控工具使用方面总是浅尝辙止，并未做过多深入研究。近来愈来愈觉得有必要针对几种常用工具好好学习一下了。而top便首当其冲。top是一款 以查看进程(task)信息为...</description></item><item><title>为什么还用C编程？</title><link>https://tonybai.com/2013/02/27/why-code-in-c-anymore/</link><pubDate>Wed, 27 Feb 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/02/27/why-code-in-c-anymore/</guid><description>本文翻译自Dr. Dobb&amp;#39;s杂志主编Andrew Binstock的文章“Why Code in C Anymore?”，以下是翻译正文。 **传统的那些选择C而不是C++的理由的说服力已经逐渐地被削弱。还有什么继续使用C的更好的理由么？** 一个 Dr. Dobb&amp;#39;s的老读者最近问我：为何人们还在使用C编程。这个话题最近曾在我们站点的评论中出现过。早期也曾出现在与一些行业公司的对话过程中，尤其...</description></item><item><title>Go defer的C实现</title><link>https://tonybai.com/2013/02/03/implement-go-defer-in-c/</link><pubDate>Sun, 03 Feb 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/02/03/implement-go-defer-in-c/</guid><description>Go语言中引入了一个新的关键字defer，个人认为这个语法关键字让异常处理也变得得心应手许多，对改善代码的可读性和可维护性大有裨益，是典型的语法棒棒糖^\_^。 像下面这种代码（伪代码）： void foo() {     apply resource1; retv = action1;     if not success         release resource1 apply reso...</description></item><item><title>关于Python Package下的Module import方式</title><link>https://tonybai.com/2013/01/24/the-module-import-way-under-python-package/</link><pubDate>Thu, 24 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/24/the-module-import-way-under-python-package/</guid><description>2012年有一个目标我没有达成，那就是深入学习和使用Python语言。这个目标被其他学习任务和工作无情的抢占了，当然最主要的原因还是我重视不够^\_^。 近期恰逢有一些Python工程的开发工作要做，就顺便略微深入地学习了一下Python：看了几本Python的英文大部头，比如《Learning Python 4th Edition》、《Python Essential Reference 4th...</description></item><item><title>buildc 0.2.2版本发布</title><link>https://tonybai.com/2013/01/15/buildc-0-2-2-release/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/15/buildc-0-2-2-release/</guid><description>随着buildc在项目中的深入使用，开发和测试人员都提出了不少良好意见，让我们有些应接不暇了，这次的版本更新也是为了满足这些意见和建议。 由于忙于应对这些眼前的需求，原本0.3.0的改进计划也被推迟了一些。 buildc 0.2.2版本包含了两个主要修正。 \* 增加了–ignore-error命令行选项 自从buildc cache相关命令严格区分–cmode=32-bit还是64-bit后，用...</description></item><item><title>buildc 0.2.1版本发布</title><link>https://tonybai.com/2012/12/06/buildc-0-2-1-release/</link><pubDate>Thu, 06 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/06/buildc-0-2-1-release/</guid><description>buildc 0.2.1版本是一个bugfix版本，修正了两个重要问题。 \* 修正执行buildc pack –cmode=32-bit时无法创建32位安装包的问题 之前的buildc pack命令在打包安装程序时忽略了–cmode这个选项，这样即便传入32-bit这个参数，打出的安装包中的应用程序依旧是64位编译的。这次修正了这个问题，让buildc真正支持打32位程序的安装包。 \* 修正b...</description></item><item><title>将Unity换成Gnome3</title><link>https://tonybai.com/2012/12/06/replace-unity-with-gnome3/</link><pubDate>Thu, 06 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/06/replace-unity-with-gnome3/</guid><description>Ubuntu 12.04已经体验一天多了，Unity还是用的不大习惯，左侧的程序启动栏感觉还是别扭，以前用windows的时候就不喜欢将任务栏放在左侧或右侧； 应用窗口的菜单栏融合到桌面顶端也没给我太多惊喜；总而言之，给自己找几个换回Gome的理由还是很容易的^\_^。况且Gnome也发生了巨变， 由传统的Gnome2更新到了全新的Gnome3，正好我也想体验一下Gnome3，于是继续折腾。 Ub...</description></item><item><title>升级到Ubuntu 12.04LTS</title><link>https://tonybai.com/2012/12/04/upgrade-ubuntu-to-1204-lts/</link><pubDate>Tue, 04 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/04/upgrade-ubuntu-to-1204-lts/</guid><description>Ubuntu 10.04 LTS已经伴随我两年了，经过我这么长时间的折腾，Ubuntu早已不堪重负^\_^。在未升级前，Ubuntu 10.04已经表现出诸多问题： \- 在家中连接无线路由器时间漫长，且经常掉线； \- 在公司用有线网络经常掉线； \- 由于反复安装软件，系统中残留较多垃圾数据； \- Ubuntu 10.04官方源中的软件版本都有些低，很多软件手工安装高版本比较费力； 另外原先...</description></item><item><title>使用squid搭建http代理</title><link>https://tonybai.com/2012/11/21/setup-http-proxy-with-squid/</link><pubDate>Wed, 21 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/21/setup-http-proxy-with-squid/</guid><description>近期在做一些基础设施搭建的过程中，又遭遇到了公司http代理的问题。主要是很多主机上的工具只支持不带身份鉴权信息的http\_proxy设置，如只 支持诸如：export http\_proxy=&amp;#39;http://10.10.1.1:8090&amp;#39;，而不支持export http\_proxy=&amp;#39;http://tonybai:passwd@10.10.1.1:8090&amp;#39;这种形式的配置。 或是其命令行选项...</description></item><item><title>buildc 0.2.0版本发布</title><link>https://tonybai.com/2012/11/06/buildc-0-2-0-release/</link><pubDate>Tue, 06 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/06/buildc-0-2-0-release/</guid><description>buildc的演进先后经历了构建管理和安装包工程管理两个阶段。其中buildc的构建管理功能在项目中应用较早，目前相对稳定可靠。但其支持的安装包工程是直到最近才被大家所正式使用的。不出意料，大家在使用过程发现了一些问题，于是我们也是边用边改。 目前一个setup工程一般具有类似如下源码组织结构： distributions/ setup.cfg src/     – README     – ap...</description></item><item><title>辩证地看待“重新发明轮子”</title><link>https://tonybai.com/2012/11/02/treat-reinventing-the-wheel-dialectically/</link><pubDate>Fri, 02 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/02/treat-reinventing-the-wheel-dialectically/</guid><description>C程序员骨子里都有一种“重新发明轮子(Reinventing the Wheel)”的特质。在面向对象、组件化流行以及崇尚复用的今天，这种特质似乎总是被认为是反面教材。但伟大的毛主席教导我们：要辩证地看待一切事物， 凡事无绝对。事物都是有两面性的，有好就有坏，有坏就有好。拿“重新发明轮子”这事而言，我们除了看到其弊端外，还要充分领会到其好的一面，不能一棒子打 死，这样才能在特定的场景下作出正确合理...</description></item><item><title>关于团队经营的若干体会</title><link>https://tonybai.com/2012/11/01/some-experience-on-team-management/</link><pubDate>Thu, 01 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/01/some-experience-on-team-management/</guid><description>在近两年的持续不断的投入和努力下，近期我在团队经营方面看到了一些成果，但这却引来了同僚们的“羡慕嫉妒恨”^\_^，他们希望了解到我是“如何将0变成 1的”。关于团队运营方面，我始终认为自己只是个初级选手，充其量就是个实践者而已。以前我也只是按照我的思路和直觉在做，并未有过什么细致的考量，也没 有人给我这方面系统的指导。这几天闲暇时回顾了一下这两年的经营历程，形成了些许体会，这里也和大家分享一下。 ...</description></item><item><title>改善技术布道效果的几个实践</title><link>https://tonybai.com/2012/10/26/some-practice-on-improving-tech-preach/</link><pubDate>Fri, 26 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/26/some-practice-on-improving-tech-preach/</guid><description>本文是笔者发表在《程序员》杂志2012年08期上的那篇“改善技术布道效果的几个实践”文章的完整版。 技术布道不易，想取得良好的效果就更难了。下面是笔者总结的几个有助于改善技术布道效果的有效实践,这里给大家分享一下。 **自我认知** 技术布道前,布道者首先要做好自我认知,这将有助于布道者确认自己是否胜任此次布道以 及采用何种布道策略以赢得更好的效果。认知的内容包括:自己是否精通这方面的技术。若 只...</description></item><item><title>也谈Go语言代码包分发</title><link>https://tonybai.com/2012/10/25/go-package-distributing/</link><pubDate>Thu, 25 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/25/go-package-distributing/</guid><description>Go语言目前(截至1.0.2版本)尚不支持直接链接.a文件(这里的.a文件指的不是传统静态共享库，而是对golang的非main包build后的产物)。这样一来Go的第三方库包或组织内部的公共代码库包只能以源码的形式分发了。 Go提供了get命令用于获取他人分发的代码包。我们通过get命令既可以获取一些知名代码托管站点上的代码，也可以获取组织内部版本控制服务器上的公共代码。 Go get支持的托管...</description></item><item><title>由一个软件库存问题想到的</title><link>https://tonybai.com/2012/10/22/thoughts-on-software-inventory/</link><pubDate>Mon, 22 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/22/thoughts-on-software-inventory/</guid><description>近期产品线出现这样一个“怪现象”：许多已经完成编码并具备提交给测试组的版本没有测试人员对应。测试部那边给出的策略是：按版本优先级从高到低依次测 试。这样一来一些重要版本需要到3个月甚至更长时间之后才能开始测试。可以肯定这种现象是生产环节的一个问题，但用什么理论去解释和分析这个问题呢？我想 到了“库存” – 软件库存。 《Joel说软件》的那个Joel曾写过一篇名为《软件库存》的文章，也正是看了那篇...</description></item><item><title>也谈Go语言声明语法</title><link>https://tonybai.com/2012/10/11/understanding-go-declaration-syntax/</link><pubDate>Thu, 11 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/11/understanding-go-declaration-syntax/</guid><description>一直在从事C语言服务端应用开发，对C的变量声明语法早已烂熟于胸，同时也深知复杂的C变量声明十分晦涩难解。记得若干年前还特意花了一些时间研究理解复 杂C变量声明的方法，记忆中这些方法包括：《C专家编程》中提到的“优先级”规则、right-left规则以及顺时针/螺旋形规则等，幸运地是我们日常 开发中少有使用极为复杂的变量声明(如void (\*signal (int signo, void (\*f...</description></item><item><title>编程语言进入“拼爹”时代</title><link>https://tonybai.com/2012/10/08/the-new-age-of-programming-language/</link><pubDate>Mon, 08 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/08/the-new-age-of-programming-language/</guid><description>近期看到一则新闻，说是Microsoft推出了一门开源的编程语言叫TypeScript，该Project的主要负责人是大名鼎鼎的Anders Hejlsberg，就是那个Turbo Pascal 、Delphi以及C#)之父。结合近几年来出现的颇受关注的其他几门编程语言，如Go、Rust、Dart)等，让我感觉到编程语言似乎进入了&amp;#34;拼爹&amp;#34;时代。 我们来列举一下这几门新兴语言的“老爹”(设计者)： ...</description></item><item><title>Go与C语言的互操作</title><link>https://tonybai.com/2012/09/26/interoperability-between-go-and-c/</link><pubDate>Wed, 26 Sep 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/09/26/interoperability-between-go-and-c/</guid><description>Go有强烈的C背景，除了语法具有继承性外，其设计者以及其设计目标都与C语言有着千丝万缕的联系。在Go与C语言互操作(Interoperability)方面，Go更是提供了强大的支持。尤其是在Go中使用C，你甚至可以直接在Go源文件中编写C代码，这是其他语言所无法望其项背的。 在如下一些场景中，可能会涉及到Go与C的互操作： 1、提升局部代码性能时，用C替换一些Go代码。C之于Go，好比汇编之于C。...</description></item><item><title>Go中的系统Signal处理</title><link>https://tonybai.com/2012/09/21/signal-handling-in-go/</link><pubDate>Fri, 21 Sep 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/09/21/signal-handling-in-go/</guid><description>我们在生产环境下运行的系统要求优雅退出，即程序接收退出通知后，会有机会先执行一段清理代码，将收尾工作做完后再真正退出。我们采用系统Signal来 通知系统退出，即kill pragram-pid。我们在程序中针对一些系统信号设置了处理函数，当收到信号后，会执行相关清理程序或通知各个子进程做自清理。kill -9强制杀掉程序是不能被接受的，那样会导致某些处理过程被强制中断，留下无法恢复的现场，导致消...</description></item><item><title>Go语言标准库概览</title><link>https://tonybai.com/2012/09/08/a-brief-tour-of-go-standard-library/</link><pubDate>Sat, 08 Sep 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/09/08/a-brief-tour-of-go-standard-library/</guid><description>本文翻译自Dr.Dobb&amp;#39;s的&amp;#34;A Brief Tour of the Go Standard Library&amp;#34;一文。 **在Go语言五周系列教程的最后一部分中，我们将带领大家一起来浏览一下Go语言丰富的标准库。** Go标准库包含了大量包，提供了丰富广泛的功能特性。这里提供了概览仅仅是有选择性的且非常简单。本文发表后，标准库的内容还可能继续增加，因此 建议大家最好是通过在线查阅库API或使用go...</description></item><item><title>Go程序设计语言(三)</title><link>https://tonybai.com/2012/08/28/the-go-programming-language-tutorial-part3/</link><pubDate>Tue, 28 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/28/the-go-programming-language-tutorial-part3/</guid><description>本文译自Rob Pike的Go语言PPT教程 – &amp;#34;The Go Programming Language Part3(updated June 2011)&amp;#34;。由于该教程的最新更新时间早于Go 1版本发布，因此该PPT中的一些内容与Go 1语言规范略有差异，到时我会在相应的地方做上注解。 第三部分大纲 ------ * 并发与通信 * Goroutines * 通道(Channel) * 并发相关...</description></item><item><title>Go程序设计语言(二)</title><link>https://tonybai.com/2012/08/27/the-go-programming-language-tutorial-part2/</link><pubDate>Mon, 27 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/27/the-go-programming-language-tutorial-part2/</guid><description>重写工作方式正如字段一样。 type NamedPoint struct {     Point     name string } func (n \*NamedPoint) Abs() float64 {    return n.Point.Abs() \* 100. } n := &amp;amp;NamedPoint{Point{3, 4}, &amp;#34;Pythagoras&amp;#34;} fmt.Println(n.Abs...</description></item><item><title>Go程序设计语言(一)</title><link>https://tonybai.com/2012/08/23/the-go-programming-language-tutorial-part1/</link><pubDate>Thu, 23 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/23/the-go-programming-language-tutorial-part1/</guid><description>int          uint int8      uint8 = byte int16       uint16 int32       uint32         float32      complex64 int64       uint64         float64      complex128 还有uintptr，一个大小足够存储一个指针的数值。 这些都是互不相同的类型；...</description></item><item><title>也谈Go语言编程 – Hello，Go!</title><link>https://tonybai.com/2012/08/17/hello-go/</link><pubDate>Fri, 17 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/17/hello-go/</guid><description>_**Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system ena...</description></item><item><title>开始学Go</title><link>https://tonybai.com/2012/08/14/getting-going-with-go/</link><pubDate>Tue, 14 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/14/getting-going-with-go/</guid><description>本文翻译自Dr.Dobb&amp;#39;s的&amp;#34;Getting Going with Go&amp;#34;。 **本文是有关Google新的系统原生语言的五周教程的第一部分，这里将先向大家展示如何建立Go语言开发环境以及构建程序，然后带领大家浏览 一些代码范例来着重了解一下这门语言的一些有趣的特性。** _这个教程系列将连续刊登五周。在今天这一部分中，Go语言专家Mark Summerfield将讲解如何建立Go语言开发环境，...</description></item><item><title>为什么不用用Go？</title><link>https://tonybai.com/2012/08/08/why-not-go/</link><pubDate>Wed, 08 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/08/why-not-go/</guid><description>本文翻译自 Dr. Dobb&amp;#39;s主编Andrew Binstock的文章&amp;#34;Why Not Go?&amp;#34;。 Go是一种对系统原生语言的重要反思，它对C语言做了重大的改善，同时还保持了语言的极简性。 今年早些时候，我们写了一篇有关新兴系统原生(native)语言的文章。这些语言包括D、Go、Rust以及Vala。当时我们承诺将会对这些语言进行 细致的探索。从本周开始，我们将开启一系列对来自Google的新...</description></item><item><title>知识管理推广难的几点原因</title><link>https://tonybai.com/2012/08/06/reasons-for-promote-km-difficult/</link><pubDate>Mon, 06 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/06/reasons-for-promote-km-difficult/</guid><description>去年在产品线内部尝试了一些知识管理的实践：建立了知识库，初步在产品线内部养成了知识整理和总结的习惯，建立了工作流程与知识库之间的粘性，取得了一定效果。今年年初在事业部内部做了有关知识库实践方面的分享，大家也都认识到这几年我们在知识积累方面上的不足，也都很赞同知识管理的重要性与必要性。会后领导决定建立事业部级知识库，并安排专人负责知识库的维护与推广。 于是乎负责知识库搭建的那个部门申请服务器、安装和...</description></item><item><title>做正确的事要趁早</title><link>https://tonybai.com/2012/08/02/do-right-things-early/</link><pubDate>Thu, 02 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/02/do-right-things-early/</guid><description>最近闲暇时间在策划实施两件事儿：一是产品的自动化回归测试；二是尝试在项目中使用一些静态代码语义分析工具。我觉得这两件事是应该做的正确的事，对提升产品质量，提前发现产品中潜在的缺陷都大有裨益。但在做的过程中才感觉到：现在做有些晚，正确的事要趁早做。 去年自动化测试组发布了自动化测试框架的第一个版本，我们的产品参加了试点。但经过自动化测试组大半年的投入，效果十分有限，根本没有达到我的预期。最主 要的问...</description></item><item><title>buildc 0.1.9版本发布</title><link>https://tonybai.com/2012/07/19/buildc-0-1-9-release/</link><pubDate>Thu, 19 Jul 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/07/19/buildc-0-1-9-release/</guid><description>随着buildc使用的深入，越来越多的新需求暴露了出来。为了满足这些需求，我们组的小兄弟又对buildc进行了一些改造，这些变化如下： 1、支持将多个子工程打包到一个安装包中 最初buildc的设计思想是为每个子工程单独制作安装包，这样具有很强的灵活性。但在对现有N个工程进行构建脚本改造的过程中发现，有些工程间存在严重 依赖，比如工程A是一个业务级公共库工程，工程B和工程C都依赖工程A构建后生成的...</description></item><item><title>buildc 0.1.8版本发布</title><link>https://tonybai.com/2012/07/02/buildc-0-1-8-release/</link><pubDate>Mon, 02 Jul 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/07/02/buildc-0-1-8-release/</guid><description>buildc这个小工具逐渐在项目组内部扩大了使用范围，还有一名专门的同事负责为每个项目制作安装包工程，这样也可以在使用中发现buildc的问题。 本次buildc 0.1.8的相关修正以及新增的feature就是我的这位年轻同事一手操刀完成的，他也是一个python新手，同样也是边翻手册边进行编码的。这次改动主要集中在templates目录下的几个文件，这里的文件多为因工程的不同而异的。 这次bu...</description></item><item><title>使用ssh通过http代理访问bitbucket</title><link>https://tonybai.com/2012/05/09/ssh-access-bitbucket-via-http-proxy/</link><pubDate>Wed, 09 May 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/05/09/ssh-access-bitbucket-via-http-proxy/</guid><description>在很多公司内部，要想访问外部互联网都需要设置代理，我所在公司也是这样，有些时候这种限制真的可以让人骂娘。不过经过几年与代理的&amp;#34;斗争&amp;#34;后，大部分需 要访问外部网络的软件(比如subversion、apt-get、git、wgetc、filezilla等)经过设置后还都可以正常工作。不过前些日 子在折腾bitbucket上的源码库时又遇到了代理问题：无论通过https方式还是ssh方式都无法clone...</description></item><item><title>翻译《七周七语言》的那些事儿</title><link>https://tonybai.com/2012/05/08/translate-seven-languages-in-seven-weeks/</link><pubDate>Tue, 08 May 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/05/08/translate-seven-languages-in-seven-weeks/</guid><description>今天在互动出版网看到《七周七语言：理解多种编程范型》一书已经开卖了。看到自己参与翻译的第一本书出版了，心中还是很愉悦的，因为自己的辛苦付出终于有了结果。 **一、缘起** 能够参与到这本书的翻译完全是机缘巧合。记得2011年初我启动了一个《Programming in Haskell》的公共翻译项目，可是由于欠缺版权的考虑，中途不得不终止了该书的翻译。当时经dreamhead介绍联系到图灵的刘江总...</description></item><item><title>buildc 0.1.7版本发布</title><link>https://tonybai.com/2012/04/19/buildc-0-1-7-release/</link><pubDate>Thu, 19 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/19/buildc-0-1-7-release/</guid><description>最近针对buildc又有了一些新想法，于是今天上午又对buildc进行了多处修改，并相继发布了0.1.6版本和0.1.7版本。 \* 对buildc cache upgrade的实现进行了修改。 在执行全量更新本地cache前，先对本地cache的情况进行一些检查，并判断是否与当前.buildc.rc中的配置相符。如果两者是一致的，那么只进行update操作；否则则执行真正的upgrade(rem...</description></item><item><title>buildc 0.1.5版本发布</title><link>https://tonybai.com/2012/04/13/buildc-0-1-5-release/</link><pubDate>Fri, 13 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/13/buildc-0-1-5-release/</guid><description>这两天对buildc的改动比较频繁，今天又修正了一些问题，也增加了一些小功能。主要包括这么几点： 1、在Make.rules.in中增加了STATIC\_LIBS和DYNAMIC\_LIBS 项目源代码和项目中单元测试代码使用同一个Make.rules，也此编译时也就共享同一个LIBS变量。对于静态共享库还好说，但对于动态共享库，诸如Oracle的instantclient库，单元测试代码中即使没...</description></item><item><title>buildc 0.1.4版本发布</title><link>https://tonybai.com/2012/04/12/buildc-0-1-4-release/</link><pubDate>Thu, 12 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/12/buildc-0-1-4-release/</guid><description>年后buildc开始逐渐在产品线的项目里应用了，随之而来的是大家反馈的各种意见和bug。尤其是bug，我都会很认真地应对，也会及时发布相应的版本修复这些bug。buildc 0.1.4版本就是一个bugfix版本，其修复的bug源于今天上午的一次持续集成的失败。 上午收到Jenkins发送的一个&amp;#34;build failed&amp;#34;的mail，一个安装包项目的CI job执行失败了，于是到Jenkins w...</description></item><item><title>关于编译阶段符号多重定义的问题</title><link>https://tonybai.com/2012/04/11/multiple-definitions-of-the-compiling-phase/</link><pubDate>Wed, 11 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/11/multiple-definitions-of-the-compiling-phase/</guid><description>印象中关于编译以及链接的问题早已是老生常谈了。但今天又遇到了一个这样的问题，这里还总想提及一下下^\_^。 这次要说的问题依旧发生在使用lcut进行单元测试的过程中。一位同事在编译使用了mock函数的测试用例代码时出现了&amp;#34;multiple definition of &amp;#39;xxx&amp;#39;“的错误。这里简单模拟其场景如下： /\* testall.c \*/ /\* mock lib function \*/...</description></item><item><title>lcut 0.3.0版本发布</title><link>https://tonybai.com/2012/04/10/lcut-0-3-0-release/</link><pubDate>Tue, 10 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/10/lcut-0-3-0-release/</guid><description>lcut单元测试框架在我的项目中应用已经有一段时间了，项目组的同事对lcut的使用也是越来越熟悉，这不今天一位同事还提出了一个新需求，需求大致是这样的。 在实际项目中，经常遇到这类情况： int bar(…) { int ret; ret = foo(…); /\* assert ret \*/ … ret = foo(…); /\* assert ret \*/ … ret = foo(…); ...</description></item><item><title>如何加入Linux内核开发社区(7)</title><link>https://tonybai.com/2012/04/09/how-to-participate-linux-community-section-7/</link><pubDate>Mon, 09 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/09/how-to-participate-linux-community-section-7/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第七章、第八章以及第九章节的中译文。 **7、高级主题** 但愿此时此刻，你已经理解了内核开发过程是如何进行的。但仍然还有很多东西要学习！...</description></item><item><title>如何加入Linux内核开发社区(5)</title><link>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-5/</link><pubDate>Thu, 05 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-5/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第五章节的中译文。 **5、发布补丁** 迟早有一天你的工作将提交到开发社区进行评审，并最终合入内核主线。不出所料，内核开发社区在发布补丁...</description></item><item><title>如何加入Linux内核开发社区(6)</title><link>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-6/</link><pubDate>Thu, 05 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-6/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第六章节的中译文。 **6、将补丁工作进行到底** 此时此刻，你已经遵循了这里到目前为止给出的所有指导原则，并且由于你自己的工程技能，你已...</description></item><item><title>如何加入Linux内核开发社区(4)</title><link>https://tonybai.com/2012/03/31/how-to-participate-linux-community-section-4/</link><pubDate>Sat, 31 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/31/how-to-participate-linux-community-section-4/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第四章节的中译文。 **4、正确地编写代码** 关于那个可靠的面向社区的设计过程我们已经说的够多了，任何内核开发项目的证据都是最终的代码。...</description></item><item><title>如何加入Linux内核开发社区(3)</title><link>https://tonybai.com/2012/03/29/how-to-participate-linux-community-section-3/</link><pubDate>Thu, 29 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/29/how-to-participate-linux-community-section-3/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第三章节的中译文。 **3、早期规划** 当考虑一个Linux内核开发项目时，人们可能很想尽快投入并开始编码。但和任何重要的项目一样，推动...</description></item><item><title>如何加入Linux内核开发社区(2)</title><link>https://tonybai.com/2012/03/28/how-to-participate-linux-community-section-2/</link><pubDate>Wed, 28 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/28/how-to-participate-linux-community-section-2/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。下面是该文章第二章节的中译文。 **2、内核开发过程是如何进行的** 在20世纪90年代初，当时的Linux内核开发是一件非常松散的事情，涉及的用户和开...</description></item><item><title>如何加入Linux内核开发社区(1)</title><link>https://tonybai.com/2012/03/27/how-to-participate-linux-community-section-1/</link><pubDate>Tue, 27 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/27/how-to-participate-linux-community-section-1/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。下面是该文章第一章节的中译文。 **1、内核开发过程指南** 本文旨在帮助那些在参与开发社区(community)工作过程中遭遇些许挫折的开发人员(以及...</description></item><item><title>也谈Linux Kernel Hacking – Kconfig与Kbuild</title><link>https://tonybai.com/2012/03/18/linux-kernel-hacking-series-kconfig-and-kbuild/</link><pubDate>Sun, 18 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/18/linux-kernel-hacking-series-kconfig-and-kbuild/</guid><description>**_挖掘简单现象背后的复杂本质。_**– Tony Bai^\_^ 上文讲到Linux Kernel的配置和编译十分简单，甚至简单到可以与一个用户层应用相媲美。这一切都是因为Linux Kernel实现了一套易于使用、变更和后期维护的配置和编译体系。要知道最新Linux Kernel版本的代码量可是千万级别的，并且模块众多，其背后的配置和编译体系一定不那么简单，这次我们就来尝试Hack一下这套体...</description></item><item><title>也谈Linux Kernel Hacking – 内核配置、编译与安装</title><link>https://tonybai.com/2012/03/15/linux-kernel-hacking-series-kernel-config-compile-and-install/</link><pubDate>Thu, 15 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/15/linux-kernel-hacking-series-kernel-config-compile-and-install/</guid><description>_**Linux Kernel之于C程序员，就好比世界之巅珠穆朗玛之于专业登山客。**_ — Tony Bai^\_^ 作为到目前为止最为成功的开源项目，Linux Kernel总是散发着无穷的魅力，就好比那珠穆朗玛，让人魂牵梦绕，心潮澎湃并总是想尝试征服。 记得2006年初我曾花了些时间研究Linux Kernel，但后来迷失在了Linux Kernel引导阶段，无法自拔，最终选择了&amp;#34;知难而退&amp;#34;...</description></item><item><title>C语言编码风格和标准</title><link>https://tonybai.com/2012/03/07/the-chinese-translation-of-recommended-c-style-and-coding-standards/</link><pubDate>Wed, 07 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/07/the-chinese-translation-of-recommended-c-style-and-coding-standards/</guid><description>近期在为产品线的知识库编写一些指南类的文档，其中有一项就是对现有的C语言编码规范进行一些修订。为了&amp;#34;有米下锅&amp;#34;，我还特意在网上找了一些相关资料。关于C语言编码风格和标准的资料大多都成稿于上个世纪90年代，也就是在C90发布之后的若干年里；在C99发布后，部分资料根据最新的规范做了修订，但也有些资料认为C99对整体风格影响不大，也就保持了原样。 在这些资料中，我重点关注了一下这份文档《Recomme...</description></item><item><title>Adapter模式的C实现</title><link>https://tonybai.com/2012/03/05/implement-adapter-pattern-in-c/</link><pubDate>Mon, 05 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/05/implement-adapter-pattern-in-c/</guid><description>Adapter(适配器)模式是《Design Pattern》一书中结构类模式集中的第一个模式，也是一个真正被我的同事在产品代码中应用的模式。 Adapter模式也是一个相对容易理解的模式，多数书籍和网络资料在描述这个模式时都使用了一个与电源适配器有关的例子，说不定Adapter模式还真的是源于对电源适配器的再思考和挖掘呢。 我们在重构遗留代码时引入了Adapter模式。遗留系统中存在的问题大致是...</description></item><item><title>使用Jenkins实现多平台并行集成</title><link>https://tonybai.com/2012/02/15/intergating-on-multiple-platforms-simultaneously-using-jenkins/</link><pubDate>Wed, 15 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/15/intergating-on-multiple-platforms-simultaneously-using-jenkins/</guid><description>我们的后端C应用都是支持跨平台的，至少目前在Linux和Solaris上运行是没有问题的，这样一来我们在配置持续集成环境时就要考虑如何实现在代码Commit后触发多平台并行(同时)集成这个需求。 之前使用Buildbot时是通过为一个Scheduler配置多个Builder满足这个需求的。但现在要换成Jenkins，我们如何来实现呢？昨天在折腾Jenkins时我把问题想简单了，今天细致查看了一下B...</description></item><item><title>折腾Jenkins</title><link>https://tonybai.com/2012/02/14/install-and-configure-jenkins/</link><pubDate>Tue, 14 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/14/install-and-configure-jenkins/</guid><description>Buildbot是产品线C应用项目中采用的唯一持续集成工具，一直以来用得还不错。但前些日子部门负责过程改善的同事找到我，说今年部门计划统一各个项目组所使用的Continuous Integration工具，Buildbot有些小众，没有入大家的法眼，部门期望使用的是Jenkins(即原来的Hudson)。既然组织有统一规划，那我自然积极支持。但首先要做的就是评估Jenkins是否能满足我们的需求，...</description></item><item><title>为buildc添加安装包制作相关功能</title><link>https://tonybai.com/2012/02/10/add-packing-feature-to-buildc/</link><pubDate>Fri, 10 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/10/add-packing-feature-to-buildc/</guid><description>在&amp;#34;也谈C应用安装包制作与部署&amp;#34;一文中，我提到了为每一个源码工程建立单独的安装包制作工程(setup project)的想法，这两天我就一直在折腾这件事儿^\_^。 最初我并没有想去搞一个通用的安装包制作工具，只是为一个现有的源码工程建立了一个试验性质的安装包工程，并实现了其构建脚本(build.py)。但之后考虑到各个项目都要建立一个对应的安装包工程，安装包工程的构建脚本build.py势必会沦...</description></item><item><title>为buildc添加setup脚本</title><link>https://tonybai.com/2012/02/07/add-setup-script-for-buildc/</link><pubDate>Tue, 07 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/07/add-setup-script-for-buildc/</guid><description>buildc在发布0.1.0版时并没有做好安装脚本，当时的建议是直接下载0.1.0的源码包或svn export/checkout源码包，并手工将buildc目录位置加入到用户的PATH环境变量中。近期buildc计划正式投入到项目中使用，为了方便大家安装以及以后的统一升级维护，我花了些时间给buildc加上了setup脚本。 Python有标准的程序分发方案，不过我对这些了解不多。buildc本...</description></item><item><title>也谈C应用安装包制作与部署</title><link>https://tonybai.com/2012/02/01/also-talk-about-c-app-install-package-making-and-deploying/</link><pubDate>Wed, 01 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/01/also-talk-about-c-app-install-package-making-and-deploying/</guid><description>虽然部门一直在做C应用，但这么多年来，在C应用的安装包制作以及部署方面做得还是很初级，可以说还没有达到规范的程度。各个产品线的C应用安装包种类多样，水平参差不齐：有些产品的源码包即是安装包，把源码包拿到生产环境下编译后使用；有的项目则将编译好的目标文件(.o)以及第三方库放在安装包中，在生产环境下重新链接生成可执行文件；有的组则稍微专业一些，安装包中放的是编译好的可执行文件，但在目标主机上安装和执...</description></item><item><title>也谈C语言应用构建</title><link>https://tonybai.com/2012/01/17/also-talk-about-building-c-app/</link><pubDate>Tue, 17 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/17/also-talk-about-building-c-app/</guid><description>构建是软件开发过程中最常见的活动之一，也是很容易被忽视的环节。规范以及高效的构建对软件开发过程而言是大有裨益的。C语言并非一门年轻的语言，其历史已甚为悠久了(相对于还年轻的IT领域^\_^)。从C语言诞生以来，市面上存在的C语言应用何止千千万万。这些C应用的源码组织形式种类万千，从最简单的单个源文件，到复杂的诸如Apache httpd server这样庞大的Project。不过无论这些C应用的源...</description></item><item><title>关于组织内部建立良性提议反馈机制的一些考量</title><link>https://tonybai.com/2012/01/06/thoughts-on-establishing-a-benign-feedback-mechanisms-inside-the-organization/</link><pubDate>Fri, 06 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/06/thoughts-on-establishing-a-benign-feedback-mechanisms-inside-the-organization/</guid><description>近期完成了与组员的年终绩效面谈，收集上来一些意见和建议，其中有一些涉及到部门对大家反馈的意见和建议处理不妥的情况，对此我也做了认真的考量，于是就有了这篇短文。 组织的基本单元是人(即组员)，组织的运行依靠的也是组员，组员对组织的运行情况最有发言权，组织内部存在的问题他们会第一时间感知到，也许他们也是第一个尝试解决问题并作出改进的人，因此他们的意见和建议是最最宝贵的，作为一个组织的领导者首先应该认识...</description></item><item><title>C语言项目构建管理辅助工具 – buildc</title><link>https://tonybai.com/2011/12/08/buildc-a-building-assistant-tool-for-c-app/</link><pubDate>Thu, 08 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/08/buildc-a-building-assistant-tool-for-c-app/</guid><description>这几年我一直从事C语言项目的开发。这些项目的规模都不算小，少则十几万代码，多则几十万行代码，至少也都算得上是中型项目吧。项目构建工具使用的是传统的Make工具，构建脚本都是自行编写的，构建时直接在顶层目录下敲入make即可。 这种传统的构建方式其实是很耗时费力的。比如执行make之前你需要根据项目代码的实际路径重新设定一些环境变量或修改Makefile中的某些标识路径的变量；你还要将项目依赖的各种...</description></item><item><title>利用缓冲区溢出漏洞Hack应用</title><link>https://tonybai.com/2011/12/01/hack-app-by-buffer-overflow-leak/</link><pubDate>Thu, 01 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/01/hack-app-by-buffer-overflow-leak/</guid><description>我们在平时编码过程中很少考虑代码的安全性(security)，与正确性、高性能和可移植性相比，安全性似乎总被忽略。昨天从安全性角度泛泛地Review了一下现有的代码，发现了不少具有安全隐患的地方。我们的程序员的确缺乏系统地有关安全编码方面的训练和实践，包括我在内，在安全编码方面也都是初级选手，脑子中对安全性编码缺乏系统的理解。 市面上讲解编码安全性方面的书籍也不是很多，在C编码安全性方面，CERT...</description></item><item><title>知识管理那些事儿</title><link>https://tonybai.com/2011/11/23/those-things-about-knowledge-management/</link><pubDate>Wed, 23 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/23/those-things-about-knowledge-management/</guid><description>我不是知识管理领域的专家，但我认为知识的积累和管理对一个期望长久稳定发展的组织来说很重要。今天我这个&amp;#34;门外人&amp;#34;就来说几句&amp;#34;门外话&amp;#34;。 我所在的部门已经成立10余年了，但说实话部门在知识积累和管理方面做的比较一般。例如，没有统一的知识积累和管理平台，知识分享多靠mail列表，或将知识存储在文件中放入Microsoft Visual SourceSafe，若干日子后，再无人能找到之前的知识(VSS绝对...</description></item><item><title>也谈C语言的restrict类型修饰符</title><link>https://tonybai.com/2011/11/18/also-talk-about-restrict-type-qualifier-in-c/</link><pubDate>Fri, 18 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/18/also-talk-about-restrict-type-qualifier-in-c/</guid><description>restrict关键字是C99标准中新引入的一个类型修饰符(type qualifier)。如果你看过GNU C库的源码或是其manual，你就会发现restrict修饰符被广泛地应用在GNU C库中。restrict关键字到底是用来做什么的呢？估计很多对C语言细节研究不够的程序员都无法给出答案，我个人也只是停留在&amp;#34;知道&amp;#34;这一关键字的层次上，于是乎今天我又对着C99规范钻研了一番，略有收获，这里也...</description></item><item><title>State模式的C实现</title><link>https://tonybai.com/2011/11/07/implement-state-pattern-in-c/</link><pubDate>Mon, 07 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/07/implement-state-pattern-in-c/</guid><description>上个周末花了些时间将《Pro Git》（Git高手进阶之必读书籍，严重推荐^\_^）快速地浏览了一遍，在感叹于Git强大的同时，也见识到了Git的复杂。可以肯定的是Git学习曲线远没有学习Subversion那样平坦。比如，Subversion工作目录下的文件只有三种状态：Untracked、Modified和Committed(即Unmodified)；而以Git本地工作目录下则有四种状态：Un...</description></item><item><title>Transaction模式的C实现</title><link>https://tonybai.com/2011/11/04/implement-transaction-pattern-in-c/</link><pubDate>Fri, 04 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/04/implement-transaction-pattern-in-c/</guid><description>提到Transaction模式(即事务模式)，很多人会感到陌生。这并不奇怪，在大名鼎鼎的GoF的《Design Pattern》一书中，它仅仅是Command模式的别名罢了。不过在实际的开发中，我们却经常会遇到可以应用事务模式的场景。本文可以理解成Command模式在事务领域的应用，但这样说有些麻烦，我们莫不如直接称之为Transaction模式。 与前几篇设计模式C实现系列文章一样，这篇文章也源...</description></item><item><title>Chain of Responsibility模式的C实现</title><link>https://tonybai.com/2011/10/25/implement-chain-of-responsibility-pattern-in-c/</link><pubDate>Tue, 25 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/25/implement-chain-of-responsibility-pattern-in-c/</guid><description>又是一个行为类的模式，似乎这类模式在使用C语言开发的项目中适应性更强，而另外两类模式创建型和结构型则略显不受待见^\_^。 Chain of Responsibility模式（中文名：职责链模式）是一个不算复杂的模式。虽不复杂，但用好了同样可以解决大问题。个人觉得其最大的好处就在于可以动态地重组针对一类对象的处理流程。正是得益于这一优势，它才可以在纷繁芜杂的业务领域站稳脚跟。 我们遇到的问题是这样...</description></item><item><title>Strategy模式的C实现</title><link>https://tonybai.com/2011/10/20/implement-strategy-pattern-in-c/</link><pubDate>Thu, 20 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/20/implement-strategy-pattern-in-c/</guid><description>与那些复杂的模式相比，Stragegy Pattern(策略模式)是一个相对简单的模式，很直观，也易于理解。 同时它也是我们在开发过程中使用最多的模式之一。 问题是设计模式使用的驱动力，只有当我们遇到问题时，设计模式才会向我们伸出援助之手。这里我也想通过对问题以及解决方法演化的阐述来说明策略模式是如何更好地帮助我们的。我们从问题出发！ Tony最近接到了一个新任务，任务的内容是实现一个通用的平衡二...</description></item><item><title>C语言的现状</title><link>https://tonybai.com/2011/10/17/the-state-of-c/</link><pubDate>Mon, 17 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/17/the-state-of-c/</guid><description>本文翻译自Dr. Dobb&amp;#39;s Journal官网上的一篇由Brian W. Kernighan和Dennis M. Ritchie共同撰写的名为&amp;#34;The State of C&amp;#34;的文章。这里谨将此篇译文献给不久前刚刚离我们而去的C语言之父 – Dennis M. Ritchie，愿一代计算机科学巨匠一路走好。 **不再只是为了系统级编程(system programming)** C是一门通用的计...</description></item><item><title>Observer模式的C实现</title><link>https://tonybai.com/2011/10/14/implement-observer-pattern-in-c/</link><pubDate>Fri, 14 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/14/implement-observer-pattern-in-c/</guid><description>设计模式) (Design Pattern，以下简称DP)的定义有很多种。我个人的理解：DP是人们在软件开发过程中所总结出来的一些典型问题的经验解决方法模板。使用它们可以使我们的代码更易被复用，更易扩展，更好地适应变化以及更便于后期维护。 人们都说设计模式是独立于语言的，但这里的&amp;#34;语言&amp;#34;更多的是指面向对象语言，比如Java、C++、C#、Python和Ruby等。使用面向对象语言(OO)在实现设计...</description></item><item><title>C程序员驯服Common Lisp – 函数</title><link>https://tonybai.com/2011/09/23/c-programers-tame-common-lisp-series-functions/</link><pubDate>Fri, 23 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/23/c-programers-tame-common-lisp-series-functions/</guid><description>Common Lisp是函数式编程语言，其基本组成单元自然是函数。对Common Lisp函数的理解也是学习Common Lisp语言的关键。另外与C语言以内存单元修改为主要编程方法不同，Common Lisp的主要编程方法是将函数应用于参数。这里我们分别用两种范式风格实现同一个函数，该函数用于取得第n个fibonacci数（n从0开始）： ;; 命令式风格 (defun imperative-f...</description></item><item><title>C程序员驯服Common Lisp – 变量</title><link>https://tonybai.com/2011/09/20/c-programers-tame-common-lisp-series-variables/</link><pubDate>Tue, 20 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/20/c-programers-tame-common-lisp-series-variables/</guid><description>变量是C语言中最常用的、不可或缺的语言元素。C语言是命令式编程语言（imperative programming language），其基本编程方法是基于对内存单元的修改，而变量又恰是对内存单元的抽象表示，比如：&amp;#34;int a = 0xff&amp;#34;这行语句告诉我们在内存中有一块大小为4个字节的区域，该区域可以通过a这个变量直接访问，该区域初始时存储的值为0xff。由此看来C语言的主要操作就是变量操作。 C...</description></item><item><title>C程序员驯服Common Lisp – 控制结构</title><link>https://tonybai.com/2011/09/14/c-programers-tame-common-lisp-series-control-structure/</link><pubDate>Wed, 14 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/14/c-programers-tame-common-lisp-series-control-structure/</guid><description>光有表达式，我们依旧无法写出实用的程序，我们还缺少控制结构(Control Structures)。 C语言主要有三种控制结构：顺序结构、条件分支结构和循环结构。Common Lisp 也实现了类似的控制结构，我们逐一来看。 一、顺序结构 顾名思义，顺序结构中的语句或表达式是按其位置的先后顺序依次执行的，这也是最简单也最容易理解的一种结构。在C语言中，绝大多数代码块(code block)中的代码...</description></item><item><title>当可执行程序版本信息变更时</title><link>https://tonybai.com/2011/09/09/when-program-version-changed/</link><pubDate>Fri, 09 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/09/when-program-version-changed/</guid><description>在Unix/Linux上，我们一般可以通过两种方法查看到一个可执行程序的版本信息，以下以Ubuntu中的Gcc为例。 第一种方法：我们可以直接通过程序名字得到版本信息，例如: $ which gcc /usr/bin/gcc $ ls -l /usr/bin/gcc lrwxrwxrwx 1 root root 7 2010-08-21 00:18 /usr/bin/gcc -&amp;gt; gcc-4.4\...</description></item><item><title>C程序员驯服Common Lisp – 表达式</title><link>https://tonybai.com/2011/09/02/c-programers-tame-common-lisp-series-expressions/</link><pubDate>Fri, 02 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/02/c-programers-tame-common-lisp-series-expressions/</guid><description>Common Lisp程序由一组表达式构成。在&amp;#34;入门&amp;#34;一文中我提到过：Common Lisp使用S-expressions作为表达式(Expressions)的基本语法格式。S-expressions由原子(atoms)和S-expressions列表组成，或者说原子和列表(List)是组成S-expression的基本元素。复杂的源程序都是由简单的表达式组成的，我们在学习编写实用的Common ...</description></item><item><title>使用C99特性简化代码编写</title><link>https://tonybai.com/2011/08/31/simplify-coding-in-c99/</link><pubDate>Wed, 31 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/31/simplify-coding-in-c99/</guid><description>至今我还记得第一次听说C99标准还是在读大一时，那时同寝一位兄弟手头有一本Herbert Schildt编写的《C: The Complete Reference，Fourth Edition》(中文名：C语言大全)，书封皮的右上角上赫然写着&amp;#34;详解C99 ANSI/ISO最新标准&amp;#34;，那时离C99标准发布仅仅才一年。 那个时候我们大学授课以及实验用的还是Borland的Turbo C 2.0，C99...</description></item><item><title>C程序员驯服Common Lisp – 入门</title><link>https://tonybai.com/2011/08/30/c-programers-tame-common-lisp-series-introduction/</link><pubDate>Tue, 30 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/30/c-programers-tame-common-lisp-series-introduction/</guid><description>毫无疑问，Common Lisp是一门庞大且复杂的语言，学习曲线并不平坦。对于一个从未接触过函数式语言、交互式语言以及动态类型语言的C程序员来说，学习Common Lisp显然是一个很大的挑战。 也许有人会问：&amp;#34;C语言已经无所不能了，为何还要学习Common Lisp？&amp;#34;在这里我不想说太多冠冕堂皇的话，至少对我而言，理由有三： 一是好奇，在C语言的世界里待得久了，总想探出头来吸几口新鲜空气，这次我...</description></item><item><title>使用autoconf解决可移植性问题</title><link>https://tonybai.com/2011/08/23/solve-portable-problem-with-autoconf/</link><pubDate>Tue, 23 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/23/solve-portable-problem-with-autoconf/</guid><description>昨天在编译项目代码时遇到了这样一个错误： xx\_base.h:72:2: 错误：#error &amp;#34;One of \_BIG\_ENDIAN or \_LITTLE\_ENDIAN must be defined.&amp;#34; 这是预编译器的错误输出。原因很明显：预编译器在处理xx\_base.h时没有发现\_BIG\_ENDIAN或\_LITTLE\_ENDIAN的定义，#error预处理宏输出了如上错误。...</description></item><item><title>Bambook使用手记</title><link>https://tonybai.com/2011/08/16/some-notes-on-using-bambook/</link><pubDate>Tue, 16 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/16/some-notes-on-using-bambook/</guid><description>自从去年7月末盛大的Bambook(中文名称：锦书)上市起，我就一直关注着这款产品。不过考虑到刚上市的产品价位较高，功能和应用有限，缺陷较多等因素，我也一直没有下单购买。期间我还差点买入Kindle，后据说Kindle对PDF及中文的支持不佳而暂时打消了念头。上周在京东看到Bambook价格降到了499，而且据网上评测Bambook在经过一年的固件升级后，增加了许多功能，其中就包括对原生pdf文件...</description></item><item><title>CBehave – 一个C语言行为驱动开发框架</title><link>https://tonybai.com/2011/08/15/cbehave-a-bdd-framework-for-c/</link><pubDate>Mon, 15 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/15/cbehave-a-bdd-framework-for-c/</guid><description>Behaviour-Driven Development，即行为驱动开发在业界早已不是什么新鲜玩意了。我之前也略有了解，不过一直没有&amp;#34;深入钻研&amp;#34;。直到今年年初InfoQ的几篇有关BDD的文章才让我对BDD有了更多的认识。与TDD一样，C语言在BDD领域依旧是一个&amp;#34;后进分子&amp;#34;，在多数主流语言(Java，C#，Ruby等)都已经拥有比较成熟的BDD框架(如JBehave、SpecFlow和Cucumb...</description></item><item><title>行为驱动开发导引</title><link>https://tonybai.com/2011/08/10/introducing-bdd/</link><pubDate>Wed, 10 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/10/introducing-bdd/</guid><description>本文翻译自Dan North的文章&amp;#34;Introducing BDD&amp;#34;。 我遇到了一个问题。当我在不同环境的多个项目中使用和教授类似测试驱动开发(test-driven development, TDD)这样的敏捷实践时，我总是能遇到来自程序员们相同的困惑和误解。他们想知道从哪里开始、测什么不测什么、一次测试多少、谁来调用他们的测试以及如何理解为什么一个测试失败了。 越是深入TDD，我越能感觉到我对...</description></item><item><title>Common Lisp初学点滴</title><link>https://tonybai.com/2011/08/05/some-experience-of-common-lisp-beginner/</link><pubDate>Fri, 05 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/05/some-experience-of-common-lisp-beginner/</guid><description>Common Lisp是一门Interactive语言，比较容易上手。无论你是用CLISP，SBCL还是Clozure CL，你都可以很快地写出一个&amp;#34;Hello, World&amp;#34;程序出来。不过千万不要因此低估了Common Lisp，前人的经验表明：Common Lisp是门庞大且复杂的语言，其学习曲线可并不低。要想真正掌握它，需要你有持续的热情、足够的耐心和不断的练习。我接触Common Lisp...</description></item><item><title>偿还N年前的一笔技术债</title><link>https://tonybai.com/2011/07/21/pay-for-a-tech-debt-of-several-year-ago/</link><pubDate>Thu, 21 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/21/pay-for-a-tech-debt-of-several-year-ago/</guid><description>记得刚来公司时曾参与过一个项目，项目中用到了部门基础库中的一个B+树接口。不过在程序调试过程中我们发现可执行程序总是dump core（在sparc solaris上），经初步分析，断定问题就出在B+树接口处，但一时又找不到问题原因。还好这个B+树的实现者就坐在我的旁边。他分析后告诉我：这个B+树接口要求用户自定义的索引结构体的size应该为4的整数倍。按照他的说法，我为结构体打了padding，...</description></item><item><title>为函数添加enter和exit级trace</title><link>https://tonybai.com/2011/07/13/add-enter-and-exit-trace-for-your-function/</link><pubDate>Wed, 13 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/13/add-enter-and-exit-trace-for-your-function/</guid><description>日常开发中，我们为了辅助程序调试常常在每个函数的出入口(entry/exit)增加Trace，一般我们多用宏来实现这些Trace语句，例如： #ifdef XX\_DEBUG\_ #define TRACE\_ENTER() printf(&amp;#34;Enter %s\\n&amp;#34;, \_\_FUNCTION\_\_) #define TRACE\_EXIT() printf(&amp;#34;Exit %s\\n&amp;#34;, \_\_...</description></item><item><title>也谈共享库2</title><link>https://tonybai.com/2011/07/07/also-talk-about-shared-library-2/</link><pubDate>Thu, 07 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/07/also-talk-about-shared-library-2/</guid><description>我之前写过一篇名为&amp;#34;也谈共享库&amp;#34;的博文，对共享库的查找和符号解析机制做了还算比较详细的说明，不过百密一疏，总有一些意想不到的情况发生。这不今天我又遇到了一个有关共享库的新问题，这里将这个问题及其解决过程记录下来，也算是对上一篇文章中未涉及内容的一个补充吧。 N年前我曾参与过部门的一个可复用系统的设计开发，当时我们设计了一种插件式的系统结构，其中所谓的&amp;#34;插件&amp;#34;是以共享库的形式提供。主程序通过读取配置...</description></item><item><title>也谈C语言编译器的标准编译阶段</title><link>https://tonybai.com/2011/07/04/also-talk-about-standard-compile-stage-of-c-compiler/</link><pubDate>Mon, 04 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/04/also-talk-about-standard-compile-stage-of-c-compiler/</guid><description>了解C编译器的工作流程有助于C程序员解决编译代码过程中出现的问题。市面上凡是讲解得还算全面的C语言书籍中都或多或少对此有所提及。 让我们在这里来回顾一下C编译器的工作流程！一般C编译器的工作流程大致分为：预编译、编译、生成目标代码（汇编）和连接这四个主要步骤。我们用实例具体描述一下这四个步骤，以最著名的GCC编译器结合helloworld.c文件为例: /\* helloworld.c \*/ i...</description></item><item><title>也谈C语言对国际化的支持</title><link>https://tonybai.com/2011/07/01/also-talk-about-the-internationalization-support-in-c/</link><pubDate>Fri, 01 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/01/also-talk-about-the-internationalization-support-in-c/</guid><description>C语言对国际化的支持由来已久，最初开始于其第一版标准，即C89标准。在C89中我们可以看到用于支持国际化的locale.h、宽字符、宽字符串以及多字节字符(串)。而之后的&amp;#34;C89增补1&amp;#34;标准，即C90标准，以及C95标准又进一步完善了C语言对国际化的支持，增加了wchar.h、 wctype.h以及大量用于操作宽字符(串)和多字节字符(串)的标准库函数。最新一版C语言标准，即C99，让C语言对国际...</description></item><item><title>使用Apache2配置多个站点</title><link>https://tonybai.com/2011/06/27/configure-multiple-websites-with-apache2/</link><pubDate>Mon, 27 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/27/configure-multiple-websites-with-apache2/</guid><description>部门虽然不是做Web开发的，但是部门内部很多服务器也是使用Apache作为Web Server的。不过一直一来我这边都是用一个Apache Server对应一套Web应用。不过今天有了新的要求：在一个已经部署了一套应用的Apache2上再部署另外一套应用。这也让我不得不深入了解一下Apache的配置。不过还好，过程还是顺利的，这里记下此文意在备忘，如果同时也能给大家带来一些有价值的参考那就再好不过...</description></item><item><title>也谈C语言的内联函数</title><link>https://tonybai.com/2011/06/22/also-talk-about-inline-function-in-c/</link><pubDate>Wed, 22 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/22/also-talk-about-inline-function-in-c/</guid><description>有这样一段代码： /\* foo.c \*/ #include  &amp;#34;stdio.h&amp;#34; inline void foo() {     printf(&amp;#34;inline foo in %s\\n&amp;#34;, \_\_FILE\_\_); } int main() {     foo();     return 0; } 我采用C99标准，并在不加任何优化选项的情况下编译之： $ gcc -std=c99 foo...</description></item><item><title>Hello，Common Lisp</title><link>https://tonybai.com/2011/06/21/hello-common-lisp/</link><pubDate>Tue, 21 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/21/hello-common-lisp/</guid><description>Paul Graham不愧被誉为Lisp)的超级推手，他的煽动力真的是很强悍。这不才刚刚看完一遍他编写的《黑客与画家》后，我就决定将Common Lisp作为今年计划学习的那门新语言，而且从现在就开始。 去年曾囫囵吞枣般的学习过Haskell，一门通用且庞大的纯函数式编程语言。在惊叹于Haskell如此与众不同且功能强大的同时，也为Haskell Monad那魔鬼般的蹩脚语法所苦恼，而Monad的...</description></item><item><title>解决一个IP路由选择问题</title><link>https://tonybai.com/2011/06/21/solve-a-problem-about-ip-route/</link><pubDate>Tue, 21 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/21/solve-a-problem-about-ip-route/</guid><description>大学时曾旁听过计算机专业的专业课-&amp;#34;计算机网络&amp;#34;（我非科班出身，只能偷偷旁听），现在还能清晰地记得当初他们使用的教材是高教社影印版的《计算机网络——自顶向下方法与Internet特色》。不过记忆中课程的内容却渐渐模糊了。有些当时并没有深刻地理解的概念，现在依旧没理解，因为平时少有涉及。 上周在搭建CI环境时遇到了两个服务器(均安装的是RHEL 5.5 OS)之间网络不通的问题。这两个服务器分处于两...</description></item><item><title>小试番茄工作法</title><link>https://tonybai.com/2011/06/14/try-pomodoro-technique/</link><pubDate>Tue, 14 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/14/try-pomodoro-technique/</guid><description>番茄工作法（Pomodoro Technique），你可能没有听说过，呵呵，它年纪也不小了，官方说它是在1980s时发明的一种时间管理方法，只不过它最近又被一些人“挖掘”了出来，并被大力推广了一番。特别是在软件开发圈子里，被包装后的番茄工作法披上了光鲜的外衣，拥有了不少粉丝（我还算不上粉丝，充其量算是个试用者 ^\_^）。 不过和历史上诸多的时间管理方法一样，番茄工作法不是银弹，它无法将你彻底地从...</description></item><item><title>让BuildBot服务于多个项目</title><link>https://tonybai.com/2011/06/07/use-buildbot-serves-serveral-projects-simultaneously/</link><pubDate>Tue, 07 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/07/use-buildbot-serves-serveral-projects-simultaneously/</guid><description>多数公司不会仅有一个项目，当你为一个项目引入持续集成实践后，其他项目就会接踵而来。这时你会重新考量BuildBot，考虑如何让BuildBot可以服务于多个项目。 如果你有足够的主机资源和人力资源，那为每个项目单独搭建一套CI环境是再好不过的了，每个项目都有专人维护CI环境，各个项目的配置互不干扰。不过对于一些公司来说，这显然有些浪费，BuildBot Master的资源消耗是不大的，我们完全可以...</description></item><item><title>把握好编码的节奏</title><link>https://tonybai.com/2011/06/03/hold-the-coding-rhythm/</link><pubDate>Fri, 03 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/03/hold-the-coding-rhythm/</guid><description>最近观察到这样一种情况，项目组内的两位比较资深同事似乎都习惯于这样来编码：他们可能会花上两、三周时间将一个模块的成百上千行代码一气呵成的编写完，然后再去与其他人编写的代码集成在一起编译，测试，最终提交。这种情况让我有些惊讶，因为我觉得一个良好的编码节奏不应该是这样的，原因有三： .这样的节奏不利于问题的早发现早解决 我们都知道问题发现越早，其解决成本越小。如果只是一味地编写代码，甚至连一次编译都不...</description></item><item><title>解决BuildBot构建结果mail无法发送的问题</title><link>https://tonybai.com/2011/05/31/solve-the-problem-that-buildbot-can-not-send-mail/</link><pubDate>Tue, 31 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/31/solve-the-problem-that-buildbot-can-not-send-mail/</guid><description>在“使用BuildBot搭建持续集成环境”一文中我曾经说到：公司使用的mail服务器只支持SSL连接，而BuildBot似乎对SSL连接的支持有些问题，导致构建结果mail无法发送“。BuildBot实际上使用的是Twisted的mail库来发送邮件的，我下载了Twisted的一些mail发送的例子程序，并使用我的公司mail账户配置，但依旧发送失败。看来这个问题与Twisted的实现有关了。 这...</description></item><item><title>使用命令行方式开发Android应用</title><link>https://tonybai.com/2011/05/24/develop-android-app-in-command-line-method/</link><pubDate>Tue, 24 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/24/develop-android-app-in-command-line-method/</guid><description>这两天参加了一个Android)开发入门培训，讲师的水平不敢恭维，课讲的基本上也是一塌糊涂，不过通过这次培训，我算是达到了Android开发快速入门的预期目标。 一般来说Android应用开发的标准工具组合是JDK + Android SDK + ADT (Android Development Tools) + Eclipse，大家基本上是通过IDE GUI进行开发操作的。不过我个人更喜欢命令行...</description></item><item><title>使用Make的命令行变量</title><link>https://tonybai.com/2011/05/19/use-command-line-vars-of-make/</link><pubDate>Thu, 19 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/19/use-command-line-vars-of-make/</guid><description>有了BuildBot搭建的持续集成环境还远未结束，具体的构建脚本还得自己来写。我们用的是Make工具，对应要编写的脚本就是Makefile。 Make是日常代码构建常用的工具，尤其是绝大多数C和C++项目都会将Make作为首选构建工具。平时多数情况大家都是直接敲入make命令便开始了构建过程，很少有人为make传入什么参数的（调试Makefile的情况除外）。但是有些时候自定义的Make命令行变量...</description></item><item><title>使用BuildBot搭建持续集成环境</title><link>https://tonybai.com/2011/05/18/set-up-ci-environment-with-buildbot/</link><pubDate>Wed, 18 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/18/set-up-ci-environment-with-buildbot/</guid><description>部门的持续集成一直做的不太好，我们开发部这边甚至一直没能做起来，这其中有各种原因：工具、意识、执行力、沟通等等。将持续集成引入到我们的开发过程中也一直是我的一个目标。去年末启动的一个项目让我感到时机变得成熟了。 新项目的代码是完全重写的，这样的机会甚是难得。因为大多数情况下大家都是在维护现有系统：做些添添补补、修正Bug以及优化之类的事情。项目初期，我特别向大家强调了要严格遵守统一代码风格并将as...</description></item><item><title>聆听编程“古训”</title><link>https://tonybai.com/2011/05/10/listen-to-old-maxim-respectfully/</link><pubDate>Tue, 10 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/10/listen-to-old-maxim-respectfully/</guid><description>市面上关于优秀编程风格和习惯养成的书籍还真不少，其中“叫好又叫座”的书诸如《代码大全》、《编程精粹:编写高质量C语言代码》、《编程匠艺》、《重构》以及《Clean Code》等。不过前些天我在网上下载了一本名为《The Elements of Programming Style》的电子书，看过此书后，我才知道开创编写优秀风格代码之路的鼻祖是谁（不知道是否还有比这本书更加古老的且系统地讲述优良编程元...</description></item><item><title>只对代码无法表达的东西写注释</title><link>https://tonybai.com/2011/05/05/comments-only-what-the-code-cannot-say/</link><pubDate>Thu, 05 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/05/comments-only-what-the-code-cannot-say/</guid><description>本文翻译自”Comments Only What the Code Cannot Say“，来自于《程序员应该知道的97件事》一书中的某个章节。 我们知道理论与实践之间存在差异。在实践中，这个差异远大于其在理论中所描述的那样 – 一份对注释（comments）的观察数据也证实了这一点。理论上，通常的注释代码的想法听起来是值得的：它可以为读者提供更多的细节，可以解释发生了什么事情。有什么能比自我帮助...</description></item><item><title>Ubuntu一年使用感受</title><link>https://tonybai.com/2011/04/29/feel-experience-after-using-ubuntu-for-one-year/</link><pubDate>Fri, 29 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/29/feel-experience-after-using-ubuntu-for-one-year/</guid><description>今天是Ubuntu 11.04版本(Natty Narwhal)发布的正日子！想必全世界的Ubuntu Fans们都会或多或少的兴奋上一阵儿。我接触Ubuntu这个Linux发行版较早，甚至可以追溯到Ubuntu 5.10。不过真正将Ubuntu作为我日常工作学习的第一操作系统还是在去年Ubuntu 10.04LTS版本发布之后。从那时起到现在整整有近一年时间了。这里我也来说说这一年来使用Ubun...</description></item><item><title>童子军规则</title><link>https://tonybai.com/2011/04/23/the-boy-scout-rule/</link><pubDate>Sat, 23 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/23/the-boy-scout-rule/</guid><description>本文翻译自&amp;#34;The Boy Scout Rule&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 童子军有一条规则：“永远保持离开时的露营地比你发现它时更整洁”。如果你在地面上发现了脏东西，那么无论是否是你留下的，你都要将它清理干净。你有意地为下一组露营者改善环境。（实际上，由童子军之父罗伯特·斯蒂芬森·史密斯·贝登堡编写的原版规则是这样的：“尝试让这个世界在你离开时比你发现它时变得更美好...</description></item><item><title>应用C语言代码风格检查</title><link>https://tonybai.com/2011/04/21/apply-style-check-to-c-code/</link><pubDate>Thu, 21 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/21/apply-style-check-to-c-code/</guid><description>代码风格（style）一直是一个见仁见智的问题，但是对于一个团队而言，如果能在代码风格上达成一致，显然无论对团队还是对个人来讲都是大有裨益的。 在这方面我们也曾做过努力，包括在团队中引入astyle工具，并在astyle的代码美化风格配置上，团队成员也集体达成过一致。但是在开发过程中还是出现了一些问题。最主要的就是对astyle工具使用不足：一些同事总是记得不停地写代码，但却忘记了按约定好的风格要...</description></item><item><title>使用正确的算法和数据结构</title><link>https://tonybai.com/2011/04/19/use-the-right-algorithm-and-data-structure/</link><pubDate>Tue, 19 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/19/use-the-right-algorithm-and-data-structure/</guid><description>本文翻译自”Use the Right Algorithm and Data Structure“，来自于《程序员应该知道的97件事》一书中的某个章节。 _一家拥有多个分行的大银行抱怨说他们为出纳员新买的计算机运行得太慢了。这件事儿发生在电子银行以及ATM机使用普及程度远不及现在的那个年代。人们更多的是亲自到银行办理业务，这些运行超慢的计算机使得大家排起了长队。因此，这家银行威胁计算机供货商要结束...</description></item><item><title>借开源实现你的雄心壮志</title><link>https://tonybai.com/2011/03/26/fulfill-your-ambitions-with-opensource/</link><pubDate>Sat, 26 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/26/fulfill-your-ambitions-with-opensource/</guid><description>本文翻译自&amp;#34;Fulfill Your Ambitions with Open Source&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 如果你在工作中没能开发那些可以实现你雄心壮志的软件，那你将有很不错的机会。也许你正在为一家庞大的保险公司开发软件，然而你实际上却宁愿供职于Google、Apple、Microsoft或是你自己初创的公司去开发下一个对世界影响巨大的软件。如果你去为你根本...</description></item><item><title>也谈SVN冲突解决</title><link>https://tonybai.com/2011/03/23/also-talk-about-solving-the-svn-conflicts/</link><pubDate>Wed, 23 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/23/also-talk-about-solving-the-svn-conflicts/</guid><description>当今的软件开发更多是团队合作，团队的所有成员均工作在同一份代码库上。这样即便是有了先进的版本控制管理工具（诸如Subversion、Git等），出现冲突（Conflict）的情况也是在所难免的。这就需要你学会解决冲突。 以Subversion为例，多数人在学习这类工具时都选择了浅尝辄止，仅仅停留在会使用update和commit这些常用的命令上。这样大家就错过了那些可以帮助你快速解决冲突的命令，以...</description></item><item><title>你应该关心你的代码</title><link>https://tonybai.com/2011/03/22/you-gotta-care-about-the-code/</link><pubDate>Tue, 22 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/22/you-gotta-care-about-the-code/</guid><description>本文翻译自”You Gotta Care about the Code“，来自于《程序员应该知道的97件事》一书中的某个章节。 即使不用大侦探福尔摩斯，我们也能知道优秀的程序员能写出好代码。糟糕的程序员…则不能。他们生产出代码巨兽，而其他人则不得不去清理。你想写出好代码，对不对？你渴望成为一名优秀的程序员。 好代码不会凭空冒出来。它也不是什么需要各大行星排成一列时靠运气才发生的事情。为了写出好代码...</description></item><item><title>升级Thunderbird</title><link>https://tonybai.com/2011/03/21/upgrade-thunderbird/</link><pubDate>Mon, 21 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/21/upgrade-thunderbird/</guid><description>自从换装Ubuntu后，就一直使用Thunderbird。很是喜欢Thunderbird超快的搜索速度、按主题组织和展示Mail以及易用的快捷键。不过这两天Thunderbird一直在给我制造麻烦。通过Top查看，我发现我的Thunderbird一直在持续占用20%-30%的CPU，这导致我的本子变得很慢。虽然能看到这个进程，但是并不清楚Thunderbird究竟在做什么。开始怀疑它在后台压缩文件...</description></item><item><title>通过精减来改善代码</title><link>https://tonybai.com/2011/03/17/improve-code-by-removing-it/</link><pubDate>Thu, 17 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/17/improve-code-by-removing-it/</guid><description>本文翻译自&amp;#34;Improve Code by Removing It&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 少即是多。这是一句有些陈腐的短小格言，但有时它确实是正确的。 在过去的几周里我对代码库所作的改善工作之一就是删除了其中的几大块代码。 我们编写软件时一直遵循着XP的（译注：极限编程，eXtreme Programming）原则，包括YAGNI（即You Aren&amp;#39;t Gonn...</description></item><item><title>知道如何使用命令行工具</title><link>https://tonybai.com/2011/03/16/know-how-to-use-command-line-tool/</link><pubDate>Wed, 16 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/16/know-how-to-use-command-line-tool/</guid><description>本文翻译自”Know How to Use Command-line Tool“，来自于《程序员应该知道的97件事》一书中的某个章节。 现今，很多软件开发工具被打包成集成开发环境（Integrated Development Environments，IDE）提供给开发者。微软的Visual Studio和开源的Eclipse就是两个颇受欢迎的IDE，当然还有很多其他类似的工具。很多程序员喜欢使用...</description></item><item><title>Review Board的几点使用体会</title><link>https://tonybai.com/2011/03/04/some-experience-on-using-review-board/</link><pubDate>Fri, 04 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/04/some-experience-on-using-review-board/</guid><description>近期产品线研发体系正式将Review Board这款优秀的基于Web的代码评审开源工具引入到开发过程中，作为产品线内各项目组进行代码评审的辅助工具。我对Review Board近两年多的关注总算没有白费，算是有了一个还算不错的结果。不过Review Board的正式使用并不代表一种结束，反而恰恰是一个新的开始。我们下一步要关注的是如何用好Review Board，让它真真正正地为改善产品质量和开发...</description></item><item><title>专业程序员</title><link>https://tonybai.com/2011/02/24/the-professional-programmer/</link><pubDate>Thu, 24 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/24/the-professional-programmer/</guid><description>本文翻译自&amp;#34;The Professional Programmer&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 什么是专业程序员？ 一个专业程序员的唯一的、最重要的特点是个人的责任。专业程序员会对他们的职业生涯负责，会对他们的估计负责，会对他们的计划承诺负责，会对他们的错误负责，会对他们的技艺负责。一个专业程序员绝不会将他们的责任推到其它人身上。 ·如果你是一名专业程序员，你将对你自己...</description></item><item><title>持续学习</title><link>https://tonybai.com/2011/02/23/continous-learning/</link><pubDate>Wed, 23 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/23/continous-learning/</guid><description>本文翻译自&amp;#34;Continuous Learning&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 我们生活在一个引人入胜的时代。软件开发分布在全球各地，你知道那里有很多人可以胜任你的工作。你需要不断学习以保持你在市场上的竞争力。否则，你将变成一条恐龙，专心从事某一个工作，直到有一天，你不再被需要或者你的工作被外包给了其它更为廉价的开发人...</description></item><item><title>代码评审</title><link>https://tonybai.com/2011/02/22/code-reviews/</link><pubDate>Tue, 22 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/22/code-reviews/</guid><description>本文翻译自&amp;#34;Code Reviews&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 你应该做代码评审。为什么呢？因为代码评审可以提高代码质量并且降低缺陷比例。但进行代码评审未必是因为你想到的那些理由。 由于之前有过一些代码评审的糟糕体验，因此许多程序员不喜欢代码评审。我曾经见过一些组织，它们要求所有代码在部署到生产环境之前必须通过一个正...</description></item><item><title>把一切都纳入版本控制</title><link>https://tonybai.com/2011/02/18/put-everything-under-version-control/</link><pubDate>Fri, 18 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/18/put-everything-under-version-control/</guid><description>本文翻译自&amp;#34;Put Everything Under Version Control&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 把项目中的一切都纳入版本控制。你需要的资源包括：免费的工具，比如Subversion，Git，Mercurial和CVS；充足的磁盘空间；便宜且性能强大的服务器；无处不在的网络；甚至包括项目托管服务。安装好...</description></item><item><title>将你的编码标准自动化</title><link>https://tonybai.com/2011/02/16/automate-your-coding-standard/</link><pubDate>Wed, 16 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/16/automate-your-coding-standard/</guid><description>本文翻译自”Automate Your Coding Standard“，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 也许你也曾经经历过。在一个项目开始阶段，每个人都有着很多良好的意愿，我们称这些意愿为“新项目决议”。多数情况下，这些决议都会被记在文档中。关于代码的那些决议最终成了项目的编码标准。在项目启动会议上，主程序员带着大家一起浏...</description></item><item><title>在你重构之前</title><link>https://tonybai.com/2011/02/15/before-you-refactor/</link><pubDate>Tue, 15 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/15/before-you-refactor/</guid><description>本文翻译自&amp;#34;Before You Refactor&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 在某些时候，每个程序员都需要重构现有的代码。不过在你动手之前，请考虑一下下面的内容，因为这可以节省你和他人的大量时间（以及痛苦）。 · 重构开始的最好方式就是对现有代码库及其测试代码进行总结和评估。 这将帮助你理解现有代码的优点和不足，你也...</description></item><item><title>应对库接口原型变更</title><link>https://tonybai.com/2011/01/24/response-for-the-interface-prototype-change/</link><pubDate>Mon, 24 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/24/response-for-the-interface-prototype-change/</guid><description>也许你经常遇到这类情况：你在代码里使用了别人提供的第三方库，当库升级为新版本后，你的代码在编译时无法通过，提示接口原型错误，经查发现原来是该第三方库提供的某接口的原型发生了变化，比如原接口被删除、增加了参数、参数减少了、修改了参数类型以及返回类型发生变化了等等。你也许会不由自主的大骂一句：F\*\*k。 我们换位思考一下，假如你是某个库的Owner，当你遇到需要修改接口原型的情形时，你应该如何去做...</description></item><item><title>又遇字节序问题</title><link>https://tonybai.com/2011/01/21/encounter-byte-order-problem-again/</link><pubDate>Fri, 21 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/21/encounter-byte-order-problem-again/</guid><description>今天上午处理了一个线上产品的故障。分析来分析去，最后定位问题还是出在字节序转换的环节上。 其实测试组早在产品上线前就曾报告了这个问题，但是对应的开发人员并未对该问题进行深入地分析，而是有些草率地将该问题归结为客户端模拟器的实现不符合标准。因为这位同事比较资深，所以当时我也没有给予足够关注。 产品今天凌晨上线，9点左右业务量开始增大，这个问题立即就被我们在现场的运维人员发现，还好我们的系统是集群式的...</description></item><item><title>小试git-svn</title><link>https://tonybai.com/2011/01/20/try-git-svn/</link><pubDate>Thu, 20 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/20/try-git-svn/</guid><description>部门一直使用Subversion作为源码版本的管理工具。说实话，Subversion比较适合目前部门的绝大多数项目：没有异地团队开发，代码中心化管理；基本上都在trunk上开发，较少使用分支，基本上没有在各个branch间切换的成本。但对于我来说，有些情况下Subversion并不能满足我的需求。 问题主要集中在本地代码的备份和版本管理上。也就是说对于尚未或暂无法提交到Subversion服务器的...</description></item><item><title>别忘了测试你的假定</title><link>https://tonybai.com/2011/01/08/do-not-forget-to-test-your-assumption/</link><pubDate>Sat, 08 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/08/do-not-forget-to-test-your-assumption/</guid><description>周四下午，收到同事的一封mail，他告诉我他的业务代码中使用的一个库接口的行为与预期不同，并在mail中给出了测试代码和测试结果。而这个接口是之前由我封装实现的。 这个库仅仅是对libevent做了一层薄薄的封装，目的是使其接口的使用方式符合部门的一贯风格。虽说封装简单，但单元测试也是一应俱全，不敢马虎，必要的地方mock也一并上阵，总体来说我个人还是比较满意的。 不过还是出现了问题，问题出在li...</description></item><item><title>基于svn diff结果的有效代码量统计</title><link>https://tonybai.com/2010/12/24/an-effectual-method-based-on-svn-diff-for-code-quantity-statistics/</link><pubDate>Fri, 24 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/24/an-effectual-method-based-on-svn-diff-for-code-quantity-statistics/</guid><description>很多公司的过程中都有阶段性统计新增或修改的有效代码行数这一环节，这里先不论统计出的结果用于做什么，就统计本身而言，常常存在诸多问题，比如统计过程耗时且繁琐、统计结果中估算成分较大，不精确等。这些问题以前也一直困扰着我们，并且长时间没有想出很好的解决办法。 今天脑子里突然冒出一个想法：能否根据svn diff得到的结果分析出来有效代码量呢？ svn diff的结果一般是这样的，分为几类： 纯新增代码...</description></item><item><title>关于在线代码评审的几点考量</title><link>https://tonybai.com/2010/12/18/thoughts-on-online-coding-review/</link><pubDate>Sat, 18 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/18/thoughts-on-online-coding-review/</guid><description>记得上次折腾Review Board这个在线代码评审工具还是在一年前，那时的Review Board版本是1.0.3；这周部门的一位同事也在折腾Review Board，不过现在的版本已经升级到了1.5.1了。新版Review Board显然修正了许多旧版本中存在的问题，另外无法支持ssl邮件端口的问题也被我这位同事通过更换django源文件的方式搞定了。Review Board好用了，下一步需要...</description></item><item><title>"%05s"行为未定义</title><link>https://tonybai.com/2010/12/17/undefined-behavior-of-05s/</link><pubDate>Fri, 17 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/17/undefined-behavior-of-05s/</guid><description>下班前，一位同事发来的mail中提到这样一个问题：在Solaris上，新添加到Project中的一段代码编译有Warning，由于我们在Makefile的GCC命令行中设置了&amp;#34;视警告如错误&amp;#34;的-Werror编译选项，导致了项目无法成功Build。 这个Warning内容如下： warning: \`0&amp;#39; flag used with \`%s&amp;#39; printf format 产生这个Warning的...</description></item><item><title>使用Libtool创建库文件</title><link>https://tonybai.com/2010/12/14/create-libraries-with-libtool/</link><pubDate>Tue, 14 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/14/create-libraries-with-libtool/</guid><description>除了autoconf和automake，GNU的autotools工具包中还有一种工具，它就是libtool。顾名思义，libtool是一个关于库文件制作、安装和使用的工具，它屏蔽了各个平台在库制作、安装和使用方面的差异，为上层提供了统一的接口。你可以直接使用libtool创建静态或共享库，也可以将libtool与autoconf、automake结合在一起使用。第二种方式显然更具实际意义，也更为...</description></item><item><title>也谈共享库</title><link>https://tonybai.com/2010/12/13/also-talk-about-shared-library/</link><pubDate>Mon, 13 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/13/also-talk-about-shared-library/</guid><description>近两天一直在考量产品安装包改进的事宜。说实话，我们的安装包做得不够&amp;#34;专业&amp;#34;，不仅没有按照各个平台的标准安装包形式(比如redhat的rpm，debian的deb或solaris上的pkg包)制作，而且安装包在生产环境中还需要再进行一次链接才能得到最终的可执行程序。这样一来，每次制作安装包都很费时费力(虽然有自动打包脚本)，安装包的&amp;#34;体积&amp;#34;也很是庞大，因为包中要包含所有.o目标文件和一部分自有库以及...</description></item><item><title>别为代码的"Bad Smell"提供土壤</title><link>https://tonybai.com/2010/12/06/do-not-provide-soil-for-bad-smell-code/</link><pubDate>Mon, 06 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/06/do-not-provide-soil-for-bad-smell-code/</guid><description>上周初参加了一次代码评审，评审时发现一位同事在自己负责的子模块代码里定义了一个私用宏，&amp;#34;重复&amp;#34;这个Bad Smell立马在我头脑中闪现。当时我给出了一个建议：检查一下这个宏定义的必要性，依次检查一下C运行库头文件中是否已经有了同功用宏定义，基础库头文件中是否已经有了同功用宏定义，业务层代码的共用头文件中是否已经有了同功用宏定义。 周末这位同事给出了答复：C运行库、基础库和业务层代码中都没有定义此功...</description></item><item><title>在TeX文档中插入源代码</title><link>https://tonybai.com/2010/12/01/insert-source-code-into-tex-document/</link><pubDate>Wed, 01 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/01/insert-source-code-into-tex-document/</guid><description>近期有了在TeX文档中插入源代码的需要。TeX的\\verbatim可以帮助你保留输入text的原始格式，但用于输入源代码还是显得不够专业。Google了一下发现TeX中支持插入源代码的包也有不少，如LGrind、Listings等。LGrind似乎没有包含在TeX Live的默认安装包中，用apt-get尝试安装LGrind，发现居然要占用近200M的空间，遂放弃之，最后我选择了Listings...</description></item><item><title>尝试博客搬家</title><link>https://tonybai.com/2010/11/30/try-to-move-blog/</link><pubDate>Tue, 30 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/30/try-to-move-blog/</guid><description>早在若干年前就有朋友建议我搭建一个独立博客，可当时的我觉得blogbus提供的服务很不错，自己没有必要去折腾，费钱又费力，所以我选择了继续留在blogbus。 这两年blogbus服务一直在不断的提高，自己也一直很欣赏blogbus的简单、清新、无广告的风格，大巴后台管理中心的功能也变得越来越强大了。不过这期间blogbus也出现过几次较为严重的故障，导致长时间的无法提供服务。上周blogbus再...</description></item><item><title>给assert加上返回值，不给力！</title><link>https://tonybai.com/2010/11/24/it-is-not-gelivable-to-add-return-value-for-assert/</link><pubDate>Wed, 24 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/24/it-is-not-gelivable-to-add-return-value-for-assert/</guid><description>众所周知，assert是程序调试阶段的一柄利器，可以帮助程序员快速的定位代码问题。但一般来说当程序部署到生产环境的时候，我们会选择关闭assert。不过由于历史原因，我们运行在生产环境下的程序中的assert依旧发挥着作用，这样一把双刃剑就悬在了我们头上。 我们用的是自己的assert实现，这个实现没有C标准库中assert实现那么普适，不过可以满足我们自己需要的功能，它在运行时可以将断言失败信息...</description></item><item><title>有选择的保留遗留“惯例”</title><link>https://tonybai.com/2010/11/15/keep-legacy-conventions-selectively/</link><pubDate>Mon, 15 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/15/keep-legacy-conventions-selectively/</guid><description>在工作中，我们常常会听到这样的声音：“原来的系统就是这么做的！”。 没错儿，在工作中我们潜移默化地受到了遗留系统的一些设计和实现的“惯例”的影响，另外天生携带的懒惰基因使我们很少去思考和判断这些惯例的正确性和保留的必要性。但事实上，我们确应该经常重新审视这些遗留的“惯例”，有选择的保留，并敢于放弃。 每种“惯例”的引入和使用都是有其特定原因的：或是可以简化代码编写，或是便于代码跟踪，或是利于代码调...</description></item><item><title>《Programming in Haskell》中文版翻译项目</title><link>https://tonybai.com/2010/11/14/the-chinese-translation-project-for-programming-in-haskell/</link><pubDate>Sun, 14 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/14/the-chinese-translation-project-for-programming-in-haskell/</guid><description>_&amp;#34;A language that doesn&amp;#39;t affect the way you think about programming， is not worth knowing&amp;#34;._ — Alan Perlis(ACM 第一任主席，图灵奖得主，1922-1990) 《程序员修炼之道》这本书建议程序员每年应至少学习一门新的语言，以拓宽思维，避免墨守成规。今年我选择了函数式编程语言Haskell。...</description></item><item><title>一个制作朴素幻灯片的TeX模板</title><link>https://tonybai.com/2010/11/08/a-tex-template-for-making-plain-ppt/</link><pubDate>Mon, 08 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/08/a-tex-template-for-making-plain-ppt/</guid><description>自从有了For book的中文TeX模板后，我对TeX的热情便&amp;#34;继续&amp;#34;一发而不可收拾^\_^。上周原本计划为内部的一个交流准备一个PPT，但在开始构思之前却突然想到：是否可以使用TeX完成幻灯片制作呢？Google了一下，果然有成熟解决方案-使用BEAMER。 有了TeX基础后，学习使用Beamer构建幻灯片就显得容易了许多，用TeX创建幻灯片文档与编写普通文档差别并不大。TeX制作的幻灯片文档也...</description></item><item><title>一个基于XeTeX和xeCJK的TeX模板</title><link>https://tonybai.com/2010/11/02/a-tex-template-based-on-xetex-and-xecjk/</link><pubDate>Tue, 02 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/02/a-tex-template-based-on-xetex-and-xecjk/</guid><description>与&amp;#34;Hello World&amp;#34;作为编程入门时迈出的第一步相似，&amp;#34;Hello TeX&amp;#34;也只是学习博大精深的TeX的一块儿敲门砖，离真正的实用还差的远。 两周前开始体验TeX，直到今天才东拼西凑地倒腾出一个够自己使用的且相对实用的基于XeTeX和xeCJK的小模板。这里分享一下，希望能给大家带来一些帮助，同时对自己也算作是一个备忘。关于TeX网上资料很多，这个模板里的东西也都是参考和融会各种资料并试验后...</description></item><item><title>lcut增加对mock的支持</title><link>https://tonybai.com/2010/10/29/lcut-add-mock-support/</link><pubDate>Fri, 29 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/29/lcut-add-mock-support/</guid><description>记得恰好是在一个月前的今天，我发布了lcut(轻量级C语言单元测试框架)0.1.0版本 。由于发布仓促，文档没能及时跟上。在stackoverflow的一个关于单元测试的帖子 上，一位叫Craig McQueen的朋友也给出了建议：&amp;#34;Some documentation would be helpful. Project background and goals, a features list,...</description></item><item><title>关于Makefile.am中与Build相关的变量设置</title><link>https://tonybai.com/2010/10/26/about-variables-related-to-building-in-makefile-am/</link><pubDate>Tue, 26 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/26/about-variables-related-to-building-in-makefile-am/</guid><description>今天尝试使用autoconf和automake重新构建一个遗留库的Build环境。之前改造的lcut的目录结构还是相对简单，改造时并未遇到什么难题，不过今天就没那么幸运了，我在头文件目录包含设置这个看似简单的环节上遇到了一些小麻烦。 这个库结构其实也没那么复杂，只是源文件和头文件不在一个目录下罢了： testproj/     – Makefile.am     – configure.in   ...</description></item><item><title>由bool类型引发的一个问题</title><link>https://tonybai.com/2010/10/21/a-problem-caused-by-bool-type/</link><pubDate>Thu, 21 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/21/a-problem-caused-by-bool-type/</guid><description>C99 原生支持布尔类型，类型名字为\_Bool。对C程序员来说，这个名字有些“不伦不类”，还好一般C标准库 实现的头文件中都用宏bool来替代\_Bool。C99虽说是C语言当前的最新标准，但是它也有10年历史之久了。据说C1x标准 正在讨论制定中，有兴趣的朋友可以到标准C工作组 官方站点上去瞧瞧。 有些跑题了^\_^！其实这篇文章想说的不是C1x标准，而是一个与布尔类型有关的问题的分析解决过程...</description></item><item><title>你好，TeX</title><link>https://tonybai.com/2010/10/18/hello-tex/</link><pubDate>Mon, 18 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/18/hello-tex/</guid><description>由于某种原因，上周末开始学习使用TeX进行文档排版。哦，当然不是直接使用Donald Knuth他老人家设计的最原始的TeX命令。经过这么多年的发展，TeX领域早已出现了各种各样基于TeX开发的层次更高、易用性更好、更加让作者关注内容的好工具。在Ubuntu下，我选择了&amp;#34;TeX Live&amp;#34;。 周末的时间比较零碎(有了果果后，除了晚上外白天很难拿出一长段的时间钻研些东西了)，TeX Live安装和体...</description></item><item><title>从mock malloc说起</title><link>https://tonybai.com/2010/10/11/start-with-mock-malloc/</link><pubDate>Mon, 11 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/11/start-with-mock-malloc/</guid><description>上午对一段代码进行单元测试，由于需要用到mock，所以选择使用cmockery 作为Unit Testing框架(lcut还未提供mock功能)。测试代码里需要mock malloc以模拟分配内存失败的异常情况。 编写一个用例后，Build，提示出错：multiple definition of \`malloc&amp;#39;。经检查发现Makefile中定义mock malloc的那个目标文件(.o文件)居...</description></item><item><title>遭遇“死循环”</title><link>https://tonybai.com/2010/10/01/encounter-endless-loop/</link><pubDate>Fri, 01 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/01/encounter-endless-loop/</guid><description>昨天看了“外刊IT评论”上的一篇名为《软件编程21法则》的文章，文章中提到的一条法则是：“软件直到被变成产品运行至少6个月后，它最严重的问题才会被发现”，当时表示认同。不过仅仅相隔一天，这条法则就变成了眼前的现实。 今天上午我们的某版本系统在某省出现了故障，该版本在这个省上线恰好将近6个月^\_^，系统上线以来一直运行良好，直到这次故障。故障现象为&amp;#34;挂死&amp;#34;:所有进程都挂死在某一把锁的lock上。以...</description></item><item><title>发布一款轻量级C语言单元测试框架</title><link>https://tonybai.com/2010/09/30/opensource-a-lightweight-c-unit-test-framework/</link><pubDate>Thu, 30 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/30/opensource-a-lightweight-c-unit-test-framework/</guid><description>基于各种xUnit框架的单元测试早已不是什么新鲜玩意儿，不过在&amp;#34;古老&amp;#34;的C语言领域，还尚未有哪种框架可以成为“寡头”。 记得2005年末的时候，初出茅庐的我吸取xUnit的设计思想在业余时间编写了一个轻量级的C单元测试框架lcut(Lightweight C Unit Test framework)，当时还写了一篇文章《C单元测试包设计与实现》记录了最初的设计和实现思路。本打算将这个小工具在部门内...</description></item><item><title>Hello，autoconf和automake</title><link>https://tonybai.com/2010/09/26/hello-autoconf-and-automake/</link><pubDate>Sun, 26 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/26/hello-autoconf-and-automake/</guid><description>部门绝大多数的产品都运行在Sun的小型机上，底层的操作系统是Solaris。这两年公司开始主推刀片机(物美价廉^\_^)，不过刀片机上运行的也是Solaris 10 for x86版本。基于同种OS的前提下在Sparc和x86两种体系之间做移植比较简单，主要考虑字节序问题就可以了。不过对于可移植性的考虑不足还是让我们付出了较大的工作量。 在即将进行的新版本产品开发中，可移植性依旧没有被列入到必须要...</description></item><item><title>做好个人代码备份与版本管理</title><link>https://tonybai.com/2010/09/19/personal-code-backup-and-revision-control/</link><pubDate>Sun, 19 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/19/personal-code-backup-and-revision-control/</guid><description>今天下午花了一个小时分别和两位同事做了一些代码讨论，这两位同事正在编写的代码都具有一定的试验性质(暂不能进入项目代码库)。这里不谈代码如何如何，而是就我发现的一个问题谈谈我的看法。 问题其实也很简单：那就是两位同事“不约而同”的都没有对这类试验性质的代码进行很好的备份和版本管理。 也许你看到这里会觉得这个芝麻粒儿大的问题不值得一提。没错，可能很多人都不以为然，不过有过以下经历的朋友们也许会与我产生...</description></item><item><title>经典设计原则背后的本质</title><link>https://tonybai.com/2010/09/17/the-nature-of-some-classical-design-rules/</link><pubDate>Fri, 17 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/17/the-nature-of-some-classical-design-rules/</guid><description>近一段时间重读了一些经典书籍，诸如《敏捷软件开发：原则、模式与实践》、 《程序员修炼之道》、《Unix编程艺术》等。这些书中关于如何衡量或评价一个类或函数设计好坏的几个原则(Principle)让人印象深刻。《敏捷软件开发》中谈到了SRP、OCP、DIP; 程序员修炼之道则以DRY、“正交性”为话题展开;《Unix编程艺术》围绕紧凑性、SPOT、分离等阐述作者立场。这么多经典原则，如何学习把握？我...</description></item><item><title>使用Ubuntu文档模板</title><link>https://tonybai.com/2010/09/10/use-the-document-template-of-ubuntu/</link><pubDate>Fri, 10 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/10/use-the-document-template-of-ubuntu/</guid><description>每次安装Ubuntu后，主文件夹(你的$HOME目录)下都会默认建立起一些目录，诸如：下载、音乐、图片等，这些目录的用途通过其名字都可以猜个八九不离十，只有一个叫作“模板”的目录一直让我摸不到头脑。直到这次彻底迁移到Ubuntu，我才发现这个“模板”目录的妙用！ 平时工作中常常需要新建一些文档，以前用Windows时都会使用右键菜单，点击“新建”，然后选择不同的文档类型。但在Ubuntu上却发现右...</description></item><item><title>修改SVN中文件的可执行属性</title><link>https://tonybai.com/2010/09/08/modify-the-executable-property-of-files-in-svn-repository/</link><pubDate>Wed, 08 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/08/modify-the-executable-property-of-files-in-svn-repository/</guid><description>今天做了一些项目版本库的搭建工作，主要是将相关模块和库目录建立好，将Makefile编写好，并添加到SVN库中。 工作接近尾声时，无意中发现提交到SVN库中的文件居然都带着可执行权限(以下称x属性)，如： \-rwxr-xr-x  1 tonybai tonybai    203 2010-04-21 17:26 Makefile\* 这着实让人觉得别扭！Svn居然记录了文件的权限信息，至少我以前...</description></item><item><title>一个关于Vim扩展TAB键的问题</title><link>https://tonybai.com/2010/09/07/a-problem-about-vim-expand-tab/</link><pubDate>Tue, 07 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/07/a-problem-about-vim-expand-tab/</guid><description>今天遇到一个奇怪的问题：明明我在.vimrc中开启了expandtab选项，但是当我编辑Makefile文件时，敲入的TAB就是无法被VIM自动转换为四个空格(已经设置tabstop=4，shiftwidth=4)，通过&amp;#34;:set expandtab?&amp;#34;查看该选项值也居然是&amp;#34;noexpandtab&amp;#34;;编辑其他文件（如.c、.h文件甚至是无扩展名的文件)时expandtab却都是开启的，TAB也可被...</description></item><item><title>视警告为错误</title><link>https://tonybai.com/2010/09/05/view-warning-as-error/</link><pubDate>Sun, 05 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/05/view-warning-as-error/</guid><description>每当你Build Project代码的时候，如果看到的是满屏的Warning，那么提醒你小心了，不妨看看《高效程序员的45个习惯》中对Warning的态度和处理方式。该书中的第34个习惯讲的是“警告就是错误”！ 当然这个“习惯”所阐述的内容并不是这本书首创，在很多经典的传授编程之道的书中也都提到过。 将警告作为错误来处理，说起来容易，可作起来可并不那么简单。这不仅仅只是一个态度的问题，有时候还需要...</description></item><item><title>Ubuntu一周体验</title><link>https://tonybai.com/2010/09/04/one-week-experience-of-ubuntu/</link><pubDate>Sat, 04 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/04/one-week-experience-of-ubuntu/</guid><description>安装Ubuntu已有一周多，无论是在工作单位还是在家里，Ubuntu都作为我的第一OS，Win7基本上处于被打入“冷宫”状态。事实证明对我来说，Ubuntu完全可以取代Windows。 公司提供有线和无线网络两种接入方式，对于致力于追求“理想的无线世界”的我来说，无线接入是我的第一选择。公司的无线接入采用TTLS认证方式，在WinXP和Win7上都有相应的客户端(SecureW2)可供使用，但在U...</description></item><item><title>一次函数设计讨论</title><link>https://tonybai.com/2010/09/02/an-discussion-on-function-design/</link><pubDate>Thu, 02 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/02/an-discussion-on-function-design/</guid><description>近期在考虑对底层函数库进行一些重构，今天下午花了两个小时考量现有的函数库的接口设计，发现目前函数库的实现存在着一个普遍的问题：与特定的内存分配实现耦合的太紧。 我们的应用是多进程结构的，并使用了共享内存这种最快捷的IPC机制，鉴于此很多同事在实现一些数据结构或者算法时可能只考虑到了我们常见的应用场景-多进程共享，而对非共享内存分配的情况考虑不足。那如何将目前某些库函数实现与内存分配之间的强耦合解开...</description></item><item><title>Ubuntu扫盲</title><link>https://tonybai.com/2010/08/31/ubuntu-eliminate-illiteracy/</link><pubDate>Tue, 31 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/31/ubuntu-eliminate-illiteracy/</guid><description>今天下午例行项目例会，例会内容乏善可陈(但都还是比较重要的事情^\_^)，无非是跟踪进度、跟踪之前未解决的问题等。近几次的例会或技术交流会我都会给大家分享些东西，哪怕是告诉大家如何从C Shell迁移到更高效的Bash Shell这样的小事情。 这次给大家带来的是如何使用分支以及TiddlyWiki这款小工具。过程较为平淡，大家也基本以沉默为主，零星有几个问题提出。 尾声阶段，大家注意到了我刚刚用...</description></item><item><title>初用TiddlyWiki</title><link>https://tonybai.com/2010/08/30/learn-tiddlywiki/</link><pubDate>Mon, 30 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/30/learn-tiddlywiki/</guid><description>2008年末和一位同事在山西出差，发现那位同事在用TiddlyWiki写一些日记，那时候算是第一次知道TiddlyWiki，但不知是为什么，当时的我并没有被TiddlyWiki所吸引，也就失去了一次使用TiddlyWiki的机会。 近期新启动了一个产品版本的开发任务，该版本是对之前遗留系统版本的重构和优化，我们想趁此机会将梳理遗留系统时总结下来的东西以及一些新的设计想法记录下来，以便于后人参考并迅...</description></item><item><title>也谈使用分支</title><link>https://tonybai.com/2010/08/26/also-talk-about-branch/</link><pubDate>Thu, 26 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/26/also-talk-about-branch/</guid><description>近期在为一个新项目作版本库规划，并策划一些即将应用于该项目的版本控制和发布流程的Rules。借此机会我也花上一些时间对我们之前的版本控制和发布流程进行一下反思，也翻看了一些书籍(比如《版本控制之道-使用subversion》、社区自由图书《Subversion与版本控制》等)，了解一下Best Practice是什么样子的，同时也纠正一下我之前理解不正确的地方。 我们这些年来一直在使用CVS/Su...</description></item><item><title>彻底迁移到Ubuntu</title><link>https://tonybai.com/2010/08/25/move-to-ubuntu-thoroughly/</link><pubDate>Wed, 25 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/25/move-to-ubuntu-thoroughly/</guid><description>自从知道Ubuntu这个linux发行版后，就有了彻底迁移到Linux上的想法。但迫于各种各样的因素一直未能下定决心，这期间Ubuntu发行版已经从6.10进化到了10.04。经过长时间(近四年，时间长的的确有些夸张^\_^)的准备，再借着Ubuntu 10.04 LTS发布的东风， 我终于下决心彻底走进Ubuntu的世界。 安装Ubuntu对我来说已经是驾轻就熟的事情了，这里也没什么好说的。对我...</description></item><item><title>重新定制VIM</title><link>https://tonybai.com/2010/08/22/reconfigure-vim/</link><pubDate>Sun, 22 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/22/reconfigure-vim/</guid><description>这周五工作状态实在不好，也许是工作得有些疲劳的缘故。没有了心思工作，那莫不如利用这些时间读读书。在存储电子书的目录中左翻翻右看看，发现了那本久违了的中文版VIM手册，我决定索性打开温习一下，拣一拣那些已经生疏了的但却极其实用的命令。 下班前400多页的手册居然被我走马观花的浏览完了，其间将遇到的觉得实用的且以前不知道的或不常用的命令记录了下来，一共有50多项，其中不乏令我大呼过瘾的能显著提升工作效...</description></item><item><title>使用svn pre-commit hook</title><link>https://tonybai.com/2010/08/07/use-svn-pre-commit-hook/</link><pubDate>Sat, 07 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/07/use-svn-pre-commit-hook/</guid><description>一直以来我们对项目代码的提交管理都是粗放型的，即对大家提交代码的时间、频率和提交日志的形式都没有严格的要求，可谓比较随意。主要发现的问题包括： \- 某些提交没有规划，甚至随意增加一些并无太大意义的注释都作一次提交。 \- 提交的代码甚至没有经过REVIEW和UT，这样的代码即使内部发布，也会带来后续工作量的严重浪费（测试、发现问题、定位问题、重新fix、重新验证等）； \- 提交日志无实际意义，...</description></item><item><title>使用astyle美化代码</title><link>https://tonybai.com/2010/07/29/use-astyle-to-beautify-your-code/</link><pubDate>Thu, 29 Jul 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/07/29/use-astyle-to-beautify-your-code/</guid><description>昨天一位同事发了一篇小文档，文档中介绍了一种开源格式化代码的工具，名为Artistic Style(astyle)，功能看起来还是很不错的。之前我写代码时比较注意代码的风格，一直按照自己的思路来美化自己的代码，用的最多的辅助工具就是Vim自带的indent功能，对这之外的格式化工具少有涉猎。记得几年前部门曾推广一款名为checkstyle的Java代码格式规范检查工具，由于当时基本不接触Java，...</description></item><item><title>慎用线程取消</title><link>https://tonybai.com/2010/04/09/be-careful-about-thread-cancellation/</link><pubDate>Fri, 09 Apr 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/04/09/be-careful-about-thread-cancellation/</guid><description>本周二，我们产品在某省的一个节点应用运行时出现了“死锁”情况，由于监控得力，我们在“死锁”后一分钟内就发现了这个情况，并及时重启了这个节点应用。由于是集群式系统，一个节点的故障对整个系统业务的运行几乎没造成什么影响。不过，这确是一个潜在的隐患。 经过对系统当时运行日志的分析，我们将问题锁定在“线程取消”这个机制的使用上。在“生产者-消费者”实现思路这篇文章中，我曾经提到过我们目前采用的一种通知机制...</description></item><item><title>Win7下招行专业版通讯问题解决</title><link>https://tonybai.com/2010/03/24/solve-the-problem-of-china-merchants-bank-professional-on-windows/</link><pubDate>Wed, 24 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/24/solve-the-problem-of-china-merchants-bank-professional-on-windows/</guid><description>昨天，也就是23号是我的信用卡还款日，由于新本子还没来得及安装招行个人网上银行专业版，我就计划回家后用家里的本子还款。到家后也没急着上网还款，待吃完晚饭后发现联通的网络居然上不去了。打客服电话报故障，但等到今天早晨起来也不见网络恢复，只好到公司再还了。 到了公司，安装招行专业版，然后准备恢复证书，居然发现网络不通；开始以为是公司代理设置的不正确，又反复调整了几次代理设置，甚至重启的本子也不见网络连...</description></item><item><title>也谈Configure脚本问题的解决</title><link>https://tonybai.com/2010/03/19/also-talk-about-solving-the-problem-of-configure-script/</link><pubDate>Fri, 19 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/19/also-talk-about-solving-the-problem-of-configure-script/</guid><description>开了一个下午的技术交流会，回到办公室时离下班时间已经不远，天气预报说今晚有暴雪，外面阴沉的天气似乎也证实了这一点。这时一个同事遇到了一个软件包编译的问题，一时无法解决，向我求助。 这是一个libmemcached的编译问题，我们用的是libmemcached 0.34版本，我的同事在PC Solaris上执行libmemcached的configure脚本时遇到如下错，Configure脚本提示：...</description></item><item><title>试用Libmemcached</title><link>https://tonybai.com/2010/03/15/try-libmemcached/</link><pubDate>Mon, 15 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/15/try-libmemcached/</guid><description>近期一直在做一个项目架构演化的讨论交流，为了解决产品中存在的某些问题，我们有意引入某种类Memcached的开源产品，但我们的应用场景并非经典Memcached的“Cache”场景，这里也不详述细节了，大致就是这么一件事儿。 我们的第一选择是日本小伙儿Mikio Hirabayashi实现的Tokyo Tyrant，主要基于三点原因： \-&amp;gt; 支持数据的持久化 \-&amp;gt; 快！（性能数据来自于网上的第...</description></item><item><title>HelloWorld.s</title><link>https://tonybai.com/2010/02/28/helloworld-in-assembly/</link><pubDate>Sun, 28 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/28/helloworld-in-assembly/</guid><description>都说汇编不易学习和使用，的确不假。自己自大学以来也曾多次尝试学习汇编，甚至大学时还有相应课时，但是自己对汇编依旧是浅尝辄止。工作后也少有使用，对汇编的认识也就停留在基础层面。汇编的学习与对计算机系统的理解是密不可分的。工作这些年也算是一直浸淫于系统层面，经过多本底层相关书籍的教诲以及工作中的实践，对计算机系统的理解就自然而然加深了。昨天下载了一本名为：“Professional Assembly ...</description></item><item><title>也谈指针运算</title><link>https://tonybai.com/2010/02/23/also-talk-about-pointer-arithmetics/</link><pubDate>Tue, 23 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/23/also-talk-about-pointer-arithmetics/</guid><description>指针在C语言中的位置这里就不多说了，这里说一下C的指针运算。指针运算一般针对的是同一连续内存块，不同内存块之间的指针运算无意义，甚至可能导致异常情况。 指针运算主要针对数组，常见的运算类型：+i, -i, ++, –以及 等。 我们以+i操作为例。运算时编译器需要知道一些必要的信息，比如p = p + 1操作时编译器需要知道这个运算后，p这个指针需要移动多少个字节，那这个信息哪里来呢，由指针p所指...</description></item><item><title>命令行选项解析-备忘</title><link>https://tonybai.com/2010/02/09/parse-command-line-options/</link><pubDate>Tue, 09 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/09/parse-command-line-options/</guid><description>翻看一本关于Shell方面的书，有一章节对命令行选项的讲解比较详细，这里总结了一下： 命令行选项分类： 1、无命令行选项(option) 如：mv file1 file2； 在命令后名显示增加一个&amp;#39;-&amp;#39;，也是一种显式无option的表达。比如：mv – file1 file2 2、有命令行选项，但无Option参数 如：rm -f file1 rm -f -r dir1 无参数的option可组合...</description></item><item><title>iterator的C实现</title><link>https://tonybai.com/2010/01/30/implement-iterator-in-c/</link><pubDate>Sat, 30 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/30/implement-iterator-in-c/</guid><description>这几天一直处于编码状态，也找回了一些对代码的良好感觉。 昨天晚上闲暇时翻阅“Head First设计模式”，当翻到迭代器模式时，突然有了想法：实现一个iterator。这几天编码时恰好也写了一个简单的带有遍历功能的小数据结构，不妨用iterator改造一下这个数据结构的遍历接口，看是否能成行。 迭代器模式较为简单，网上的文章也多得很，这里就不再贽述了，直接看实现思路和代码吧。 在迭代器模式中，有几...</description></item><item><title>Thunderbird跨平台共享邮件设置</title><link>https://tonybai.com/2009/11/20/cross-platform-configuration-of-thunderbird/</link><pubDate>Fri, 20 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/20/cross-platform-configuration-of-thunderbird/</guid><description>对于我个人来说，将工作环境切换到Ubuntu上来有几个“坎儿”要迈过，其中最为迫切的一个就是Mail如何在Windows和Linux下共享的问题，今天我找到了解决方法。 Thunderbird和Firefox一样，都来自Mozilla组织。和Outlook等软件不同的是，Thunderbird是可以跨平台的，更有甚者，Thunderbird可以帮助我们在Windows和Linux共享邮件，当然需要...</description></item><item><title>升级到Ubuntu 9.10</title><link>https://tonybai.com/2009/11/16/upgrade-to-ubuntu-9-10/</link><pubDate>Mon, 16 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/16/upgrade-to-ubuntu-9-10/</guid><description>Ubuntu 9.10版本在10月29日发布，虽然没有太多吸引我的地方，但是看了网上很多关于Ubuntu 9.10的文章后，心里面还是痒痒的，终于在上周五我用午间休息时间完成了Ubuntu 9.10版本的安装。 光盘是让同事帮我下载并刻录的，安装过程和以前没什么两样，由于本本中已经有了9.04版本，直接插入光盘升级安装就可以了。大约40分钟后，安装完毕，重启进入Ubuntu 9.10。首先感受到的...</description></item><item><title>一个Solaris x86平台64位编译的问题</title><link>https://tonybai.com/2009/11/05/a-64bit-compiling-problem-on-x86-solaris/</link><pubDate>Thu, 05 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/05/a-64bit-compiling-problem-on-x86-solaris/</guid><description>上午在做一个Solaris 10 on x86代码移植测试过程中，发现一个Gcc编译问题，这里记录下来以作备忘。 我们的代码在一台安装了Solaris 10 for x86平台的机器A上进行64位编译(gcc -m64)时报错，错误信息如下： &amp;#34;xx.c:1: sorry, unimplemented: 64-bit mode not compiled in&amp;#34;。 而奇怪的是在另外一台同为Solar...</description></item><item><title>使用iconv做内码转换</title><link>https://tonybai.com/2009/10/31/internal-code-transform-by-iconv/</link><pubDate>Sat, 31 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/31/internal-code-transform-by-iconv/</guid><description>前不久某南方省份的客户反馈说我们的产品对某些生僻字(如“赟”)的转码支持的不好，终端收到后无法显示这个字。 经分析，发现类似“赟”这样的字在GB2312编码标准中并未收录，要想支持这样的生僻字的内码转换需要产品支持目前最新的中文编码标准GB18030。而我们的产品在诞生到现在就一直只支持GB2312，这就是导致这一问题的直接原因。 产品以前的代码库中内码转换的接口都是自己实现的，仅支持GB2312...</description></item><item><title>Review Board中文支持</title><link>https://tonybai.com/2009/10/05/chinese-support-for-review-board/</link><pubDate>Mon, 05 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/05/chinese-support-for-review-board/</guid><description>Review Board安装成功至今已半月有余，这期间我一直在试用它，虽欣喜于其提供的强大的功能，但还是有若干使用中的问题一直让我头痛不已，同时也阻碍了在部门推广该工具的进程。 首当其冲的就是对中文的支持问题。按照默认的步骤安装和配置后， 输入和保存英文均没有问题，但是一旦输入中文，保存后页面显示的都是乱码，甚至某些时候在保存中文数据时Review Board还提示错误。我的 Ubuntu的loc...</description></item><item><title>也谈VIM字符集编码设置</title><link>https://tonybai.com/2009/09/28/also-talk-about-vim-charset-configuration/</link><pubDate>Mon, 28 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/28/also-talk-about-vim-charset-configuration/</guid><description>安装完中文语言包支持后，Ubuntu的默认locale是zh\_CN.UTF-8(即简体中文语言环境，字符集内码UTF-8)。这与我们日常开发环境中Unix设定的环境有所区别，我们日常使用的环境一般为zh\_CN.GBK或zh。我们的源代码文件的字符编码也都是GBK的编码，直接在Ubuntu下用默认设置的VIM打开后，中文的注释会显示乱码。如果你直接编辑这个文件并提交，那么其他在Unix下开发的同...</description></item><item><title>Firefox变身Vim</title><link>https://tonybai.com/2009/09/20/vimperator-plugin-for-firefox/</link><pubDate>Sun, 20 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/20/vimperator-plugin-for-firefox/</guid><description>在&amp;#39;IDEAL Garden&amp;#39;上看到作者在文章中提到一个名为Vimperator的FireFox插件，该插件功能甚是强大，可以让你以Vim的操作方式来使用Firefox，对于我这个天天都用Vim写代码的人来说，Vimperator可谓有非凡的吸引力，它可以让你的手指留在键盘上。 安装Vimperator这个插件仅需十几秒的时间，重启Firefox后你就可以以Vim的操作方式来尽情操作Firefox...</description></item><item><title>Review Board安装和配置札记</title><link>https://tonybai.com/2009/09/19/review-board-installation-and-configuration/</link><pubDate>Sat, 19 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/19/review-board-installation-and-configuration/</guid><description>目前部门还没有采用Pair Programming那种时时刻刻都在review代码的工作方式，代码Review多采用走查方式，即代码写完后召开一个Code Review的Meeting，集中时间和经验丰富的人力对重点代码进行筛查，这种方式的代码Review有利，但也有弊。其弊端在于低效和覆盖面小。做一次走查需要N多人参与若干个小时，而在这段时间里不是每个参与者都能极其高效的参与到走查中的，实践证明...</description></item><item><title>Solaris 10安装二三事</title><link>https://tonybai.com/2009/09/10/something-about-installing-solaris-10/</link><pubDate>Thu, 10 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/10/something-about-installing-solaris-10/</guid><description>部门服务器资源向来都比较紧张，每当忙碌季节到来，服务器资源消耗都较大，开发人员总是抱怨编辑代码慢、Build慢以及磁盘空间不足等问题，严重时甚至无法工作。部门也一直在尝试改善这个问题，无非加服务器、加磁盘等，但是这些措施似乎都难以满足开发和测试人员日益增长的对服务器资源的索求。 为了尽量在组内杜绝上述现象的发生，决定搭建多台PC Server给组内开发人员使用，让大家工作的更有效率，更独立自由，不...</description></item><item><title>Bash文件描述符重定向符号的另类理解</title><link>https://tonybai.com/2009/09/08/the-alternative-understanding-on-file-descriptor-redirection/</link><pubDate>Tue, 08 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/08/the-alternative-understanding-on-file-descriptor-redirection/</guid><description>在Unix平台工作的人都使用过Shell的重定向功能，多数人接触较多的是简单的重定向，比如： cmd &amp;gt; some\_file 将cmd命令的标准输出重定向到some\_file中 cmd &amp;amp;1 1&amp;gt;build.log”为例，看起来挺头疼，符号增多了，加了一个&amp;#39;&amp;amp;&amp;#39;这个符号，有些晕。不能看表面，我们要看原理：打开“Unix环境高级编程(APUE)”中关于文件内核数据结构的说明，回顾一下，再对应上面...</description></item><item><title>手机做MODEM实现无线上网</title><link>https://tonybai.com/2009/08/30/make-pc-surfing-the-internet-through-mobile-phone/</link><pubDate>Sun, 30 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/30/make-pc-surfing-the-internet-through-mobile-phone/</guid><description>前不久和一位售前同事到北京出差，途中在动车上看到他把本子连到Nokia手机上并通过手机上网。现如今通过手机上网也不是什么新鲜事，关键看是否需要。平时上班有公司网络，下班家里有宽带，路途中可通过手机直接浏览WAP站点，所以对于我这样的开发人员而言倒是没有特别充分的让本子通过做MODEM的手机上网的需求。 公司信息安全改造屏蔽了外部的许多站点，其中包括BLOGBUS，而且目前BUS不支持WAP浏览。这...</description></item><item><title>cmockery支持mock输出参数</title><link>https://tonybai.com/2009/08/26/cmockery-support-mocking-out-parameter/</link><pubDate>Wed, 26 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/26/cmockery-support-mocking-out-parameter/</guid><description>近两天一有空就会去看看项目代码，思考一下如何利用cmockery对项目里已有的代码进行测试。项目代码中很多被调用的接口都带有输出参数，而且在这些接口中多利用返回值指示执行成败也否，而利用输出参数返回一些关键结果，这些结果值甚至影响着后续的函数执行流程。前期研究cmockery时没有注意到cmockery是否可以设置被mock接口的输出参数的值，不过回顾了一下cmockery实现的原理，觉得cmoc...</description></item><item><title>C单元测试之使用cmockery</title><link>https://tonybai.com/2009/08/22/introduce-cmockery-for-c-unit-test/</link><pubDate>Sat, 22 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/22/introduce-cmockery-for-c-unit-test/</guid><description>这么久以来一直没有找到一款很好的支持mock测试的C语言单元测试工具包，但前不久在一网友的评论中得知：去年Google曾发布了一款c语言的轻量级单元测试framework — “cmockery”，cmcokery很小巧，对其他开源包没有依赖，对被测试代码侵入性小；它支持mock test，同样也可以支持常规的单元测试。 之前在博客中曾描述过C语言实现mock的一个思路，不过和cmockery对比...</description></item><item><title>模拟器陷阱</title><link>https://tonybai.com/2009/08/22/the-trap-of-simulator/</link><pubDate>Sat, 22 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/22/the-trap-of-simulator/</guid><description>暑去清凉来，一场大雨让燥热一去不复返了，这让身体舒服了许多。本周四晚有一次产品升级操作，按惯例每次升级前的都会对产品做一次针对性的回归测试，这次也不例外，不过临近下班时测试组爆出一个莫名奇妙的问题。 测试人员在BUG说明中写到：产品在只运行某个流程A的情况是正常的，但是当流程A和流程B一起运行时，就会出XX异常情况。作为开发人员遇到类似的问题第一反映多为：这怎么可能呢？这个产品已经经过N轮测试并且...</description></item><item><title>分享一个Oracle OCI库的BUG</title><link>https://tonybai.com/2009/07/31/a-bug-of-oracle-oci-lib/</link><pubDate>Fri, 31 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/31/a-bug-of-oracle-oci-lib/</guid><description>上周测试组反馈在一台HP X86-64主机Solaris 10 for X86环境下部署的应用无法连接Oracle数据库，错误码ORA-12154。而另外一个产品的部署在这台主机上的应用却能正常连接到数据库。本周安排专人对该问题进行查找，在先后排除了用户环境设置、Oracle数据库服务端等问题后，我们最终把目光集中在了Oracle客户端的OCI库上。 定位过程如下： 1、SQLPLUS可以访问数据...</description></item><item><title>周末“捉虫”记</title><link>https://tonybai.com/2009/07/18/debugging-notes-at-weekends/</link><pubDate>Sat, 18 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/18/debugging-notes-at-weekends/</guid><description>周六，对于上班族来说是多么好的日子，能在家里享受自由的无拘无束的生活而且不用担心第二天的工作，应该说是一周中最没有压力的一天。六点半起床，慢慢喝下一杯225ml左右的凉白开（保健医生说20-25摄氏度的凉白开比较适宜作为起床后的第一杯水），套上运动短裤和上衣，打开MP3播放器，塞上耳机，出门在园区内慢跑。昨晚下了一场雨，所以园区早上的空气很好。耳畔酷玩乐队的“Viva La Vida”让我跑起来很...</description></item><item><title>简说GLIBC strncpy实现</title><link>https://tonybai.com/2009/04/15/glibc-strncpy-source-analysis/</link><pubDate>Wed, 15 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/15/glibc-strncpy-source-analysis/</guid><description>比较以下两组代码，你认为哪组运行的更快些呢？ Example1：         int n   = 100;         int n4  = n &amp;gt;&amp;gt; 2;         int i   = 0; int a\[100\]; for (i = 0; i = 4)         {                 size\_t n4 = n &amp;gt;&amp;gt; 2; /\* n4 = n / 4， n...</description></item><item><title>GLIBC strlen源代码分析</title><link>https://tonybai.com/2009/04/11/glibc-strlen-source-analysis/</link><pubDate>Sat, 11 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/11/glibc-strlen-source-analysis/</guid><description>直接操作C标准库提供的字符串操作函数是有一定风险的，稍有不慎就会导致内存问题。这周用业余时间写了一个小型的安全字符串操作库，但是测试之后才发现自己的实现有很大的性能缺陷。 在Solaris上初步做了一个简单的性能比对，以下是得到的性能数据(以strlen的数据为例)： 当传入的字符串长度为10时，执行100w次： strlen 执行时间是：32762毫秒 my\_strlen执行时间是：49183...</description></item><item><title>有关单元测试的“只言片语”</title><link>https://tonybai.com/2009/04/08/only-a-word-or-two-about-unit-test/</link><pubDate>Wed, 08 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/08/only-a-word-or-two-about-unit-test/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>IE8的糟糕体验</title><link>https://tonybai.com/2009/03/23/terrible-experience-on-ie8/</link><pubDate>Mon, 23 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/23/terrible-experience-on-ie8/</guid><description>北京时间2009年3月20日零点，软件巨头微软公司正式发布了其Internet Explorer系列的最新版本8.0，简称IE8。早上上班后我第一时间下载了IE8的简体中文版For Windows XP。执行安装文件，重启电脑，IE8很容易就安装完毕了。 自己平时最常用的浏览器是Mozila的Firefox，但考虑到公司内部办公网以及中国内地诸多网站对Firefox糟糕的兼容性，让我还不得不继续使...</description></item><item><title>也谈软件调试</title><link>https://tonybai.com/2009/03/22/also-talk-about-debugging-software/</link><pubDate>Sun, 22 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/22/also-talk-about-debugging-software/</guid><description>每年二月末到三月初，公司都会安排一批实习生到各个部门实习。虽说去年经济危机了，但公司的实习生数量似乎并没有减少。起码我们部门&amp;#34;新同事&amp;#34;的数量基本与去年持平。按惯例，每位新同事都会有一名导师，与此同时各个部门还会根据自身的业务特点对这批学生进行有针对性的集中培训和交流。比起我入司那会儿，现在的实习生已经算是幸福多了。我那会儿实习生人数少，部门没有安排什么培训，完全靠导师安排自己努力学习。此次培训的内...</description></item><item><title>发掘Trac</title><link>https://tonybai.com/2009/03/18/learn-trac/</link><pubDate>Wed, 18 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/18/learn-trac/</guid><description>使用何种工具做Feature或Defect或Task的跟踪一直是挺让我闹心的一件事。用Excel记录，但却不便于共享、统计和直观展示；Jira算是做的好的工具之一了，但无奈它是商业软件，咱没付那份儿钱，所以也就&amp;#34;无福享用&amp;#34;；Mingle是著名的Thoughtworks公司的产品，虽说不到5个license是可以免费使用的，但它却是出了名的&amp;#34;内存杀手&amp;#34;，无奈我的机器配置太差，运行起来实在太慢，遂没有...</description></item><item><title>“扶正”Bash Shell</title><link>https://tonybai.com/2009/02/27/make-bash-my-default-shell/</link><pubDate>Fri, 27 Feb 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/02/27/make-bash-my-default-shell/</guid><description>近日，Bash Shell正式发布了其4.0版本，该版本可以看作3.x的bugfix版，同时增加了诸如&amp;#34;Associative Arrays&amp;#34;等新特性。在Bash Shell的官方站点你可以下载到最新的4.0版本，不过在GNU的Bash主页上，似乎还找不到4.0版本的所在。Bash作为Linux系统默认Shell，一直受到广泛关注，而且它还是目前几大Shell(Bourne Shell, C Sh...</description></item><item><title>CSCOPE使用中问题小解</title><link>https://tonybai.com/2009/02/23/solve-some-problems-when-using-cscope/</link><pubDate>Mon, 23 Feb 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/02/23/solve-some-problems-when-using-cscope/</guid><description>拥有了某种工具，往往不等于就能使用好这种工具。拥有工具简单，用好工具、发挥出最大作用则较难。CSCOPE让VIM的使用者有了与SourceInsight&amp;#34;平起平坐“的机会，但是能否将CSCOPE的功能发挥出来还要看你是如何使用它了。 自从VIM”重装上阵“以后，我一直在使用CSCOPE。在使用过程中还是发现了一些”别扭“的事情。一般我会在一个大型Project的源代码的顶层目录使用CSCOPE -...</description></item><item><title>VIM“重装上阵”</title><link>https://tonybai.com/2008/12/30/in-depth-study-vim/</link><pubDate>Tue, 30 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/30/in-depth-study-vim/</guid><description>国内很多学习Python的人都喜欢看&amp;#34;A Byte of Python&amp;#34;，这是一本由印度小伙儿Swaroop C H写的书，之所以受到大家关注和欢迎，想必其简单而实用的写作风格是其中的重要原因吧，作为入门书很适合。我的Laptop中就有一本中文翻译版，不过书中用的还是Python 2.3.4版本。本月3日(2008-12-3)Python 3.0 Release版祭出，Swaroop C H也在其...</description></item><item><title>使用Scons改造现有项目</title><link>https://tonybai.com/2008/12/21/use-scons-to-build-current-projects/</link><pubDate>Sun, 21 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/21/use-scons-to-build-current-projects/</guid><description>今天是冬至，也是入冬以来感觉最冷的一天，毫不夸张的说：你一张嘴，牙就冻上了。上午LP在家收拾卫生，我继续用Scons改造现有的项目。下午出去理发，头发长长了后，似乎会造成思维迟钝^\_^。 试验性的用Scons改造现有的project，过程中对Scons了解又多了一些。上篇文章对Scons的性能没有给出定论，经过对Scons的深入后，发现Scons在执行初始时的性能的确不够快，这是因为Scons启...</description></item><item><title>为Ubuntu下的Firefox提速</title><link>https://tonybai.com/2008/12/17/accelerate-the-firefox-on-ubuntu/</link><pubDate>Wed, 17 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/17/accelerate-the-firefox-on-ubuntu/</guid><description>部门的一套基础库刚刚移植到Linux上，为了测试该库，我将工作环境切换到了Ubuntu Linux下面。切换后居然发现Ubuntu下的Firefox访问网页巨慢无比，Firefox显示时明时暗，总是被挂起。同样的公司网络环境在Windows下使用Firefox访问互联网很顺畅，没有卡的现象。看来是时候给Ubuntu下的firefox提提速了。 Google了一下才发现反映类似现象的人为数不少啊，在...</description></item><item><title>发掘Scons</title><link>https://tonybai.com/2008/12/14/learn-scons/</link><pubDate>Sun, 14 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/14/learn-scons/</guid><description>发现或者说知道SCons是缘于Google的comp.lang.c group上的一则名为&amp;#34;Best Build Tool for large C projects &amp;#34;的帖子，帖子的作者列出了11条他认为&amp;#34;Best Build Tool&amp;#34;应该具备的特点，并欲找到这样的Build Tool。在该帖子的回复中，有人提到了Scons，说来惭愧，这是我第一次听说到有这样一个工具。一直在Unix下编写C程序...</description></item><item><title>常量类型的识别-一个小例子</title><link>https://tonybai.com/2008/12/02/an-example-for-recognizing-the-const-variable/</link><pubDate>Tue, 02 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/02/an-example-for-recognizing-the-const-variable/</guid><description>今天闲时写了一个Demo测试程序，目的：测试64位编译下使用mmap映射共享内存的能力。程序很简单，大致如下结构： #define MAP\_SPACE\_SIZE  (4\*1024\*1024\*1024) unsigned long int ms\_sz = MAP\_SPACE\_SIZE; …. …. ptr = mmap( NULL, ms\_sz, PROT\_READ|PROT\_...</description></item><item><title>四谈内存对齐</title><link>https://tonybai.com/2008/11/17/httptonybai-com20061208talk-about-memory-alignment-the-4th-time/</link><pubDate>Mon, 17 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/17/httptonybai-com20061208talk-about-memory-alignment-the-4th-time/</guid><description>最近在思考改进项目中一模块的实现，该模块维护起来让我很是头疼，所有才有了整体换掉它的想法。设计和实现中利用了内存对齐的技术。关于内存对齐，我曾经写过三篇文章，第一篇介绍了计算内存对齐的方法和例子，第二篇说了一个内存对齐的应用；三谈内存对齐时，则从其本质上做了阐述，而这次实际上是继续在其本质上的做文章，结合本质谈谈为什么内存对齐的计算方法就应该是第一篇中所讲的那两条。 如果对内存对齐本质还不清楚的话...</description></item><item><title>代码评审·CC2e·断言·其它</title><link>https://tonybai.com/2008/11/13/coding-review-and-cc2e-and-assertion-and-others/</link><pubDate>Thu, 13 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/13/coding-review-and-cc2e-and-assertion-and-others/</guid><description>一口气读了七章&amp;#34;Code Complete 2nd(以下称CC2e)&amp;#34;中的内容，从第七章的&amp;#34;高质量的子程序&amp;#34;到第十三章的&amp;#34;不常见的数据类型&amp;#34;。之所以一口气读这么多，是因为被其中的内容吸引了。这两天的下午一直在做代码评审，所以晚上看CC2e的时候，思维不停的在项目代码和书中内容之间跳转。一直把&amp;#34;代码大全2nd&amp;#34;当作一门百科全书式的手册类图书，买回来后一直陈放在书架上没有问津。直到今天在考虑一个关于断...</description></item><item><title>分布式编译让你的工作更高效</title><link>https://tonybai.com/2008/10/14/distributed-compiling-make-you-work-more-effectivly/</link><pubDate>Tue, 14 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/14/distributed-compiling-make-you-work-more-effectivly/</guid><description>随着工程代码量的增加，往往完整的编译一次Proj消耗的时间可能足够你喝两杯咖啡了，我现在build一次我所在proj的代码需要5分多钟，这是很痛苦的，颇让人懊恼的。为了解决这个工作中的别扭事儿，我在网上搜寻了一番，找到了distcc这个分布式编译工具。 先看看distcc能帮助我节省多少时间吧。我在公司的一台Sun SPARC Solaris9主机下对整个项目源代码按照以前的编译方式进行了一次bu...</description></item><item><title>领导意志</title><link>https://tonybai.com/2008/10/11/the-leader-will/</link><pubDate>Sat, 11 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/11/the-leader-will/</guid><description>昨天是周五，按照工作计划，上午和组内同事做个人阶段性目标沟通。在与一位曾经在国外公司里做过项目的同事沟通时，他给我讲了这么一个故事：某一年的圣诞节前夕(圣诞节在西方人眼里是地位最高的节日了吧)他所在的那家公司的经理预感到圣诞节那天他们公司的网站的访问量激增的可能性会很大，为了保证网站在那圣诞节那天能&amp;#34;挺住&amp;#34;，他要求手下的人对网站进行一次压力测试，并决定让手下用jmeter来做这件事情。手下人没有异...</description></item><item><title>使用双显示器工作</title><link>https://tonybai.com/2008/10/08/work-with-dual-monitors/</link><pubDate>Wed, 08 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/08/work-with-dual-monitors/</guid><description>组内同事与公司合购了一台ThinkPad T400的本子，按照公司规定，公司分配给她的台式机是要收回的，就在没收回之前，我将其显示器借来(没办法，无奈公司在“白菜价”的硬件上也斤斤计较)，搭建我的双显示器环境。 曾经使用过部门的投影试过双显，第一感觉很爽，只是当时扩展桌面后，我的本本一直只能作为第二显示器(辅助显示器)，桌面都显示到了投影上，调试了半天也没搞懂，略有遗憾。这次搬来同事的那个17寸液...</description></item><item><title>开始思考项目</title><link>https://tonybai.com/2008/09/17/begin-to-think-over-the-project/</link><pubDate>Wed, 17 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/17/begin-to-think-over-the-project/</guid><description>国内，也包括国外大多数项目经理/技术经理都是技术出身，工作了若干年，羽翼丰满后，被赋予了带领一个项目的责任。从技术到管理的过程多数人都需要一段时间去转换和适应。什么时候算是合格了或者说是入道了呢？没有标准。但是从我的体会而言，是否开始主动思考项目是至关重要的一点，一个重要的转折点。 刚刚从技术转为管理的人一般都不能很好适应角色的变化。技术人员最拿手的、最擅长的就是技术了，编码是他们发挥才能的舞台所...</description></item><item><title>发现一隐藏多年的Bug</title><link>https://tonybai.com/2008/09/06/found-a-bug-that-is-hidden-several-years/</link><pubDate>Sat, 06 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/06/found-a-bug-that-is-hidden-several-years/</guid><description>C语言程序员在平时工作中，到底如何获取成就感呢？我几乎可以肯定的是：找到一个隐藏已久，多年无人发现的大Bug肯定可以归属到C程序员成就感的范畴中。与操作系统斗、与编译器斗、与内存斗，其乐无穷吗^\_^。 今天测试人员在进行平台迁移测试时发现一个致命的问题，导致系统不能正常工作。问题提到我这，为了不耽误测试进度，马上丢下手头的工作开始问题的查找，经过GDB多次跟踪调试，终于发现了一隐藏多年的问题，至...</description></item><item><title>小议架构师</title><link>https://tonybai.com/2008/09/04/thoughts-on-architect/</link><pubDate>Thu, 04 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/04/thoughts-on-architect/</guid><description>这周我在两个会议场合听到“架构师”这个词。对于软件开发领域的人来说，&amp;#34;架构师&amp;#34;这三个字并不陌生，甚至很崇高。每当提到架构师的时候，大家眼睛都会放出羡慕和期待的光芒，因为众所周知的原因：&amp;#34;架构师&amp;#34;对于搞技术的人来说，都是&amp;#34;大牛&amp;#34;的代名词。 就像不想当将军的士兵不是好士兵一样，不想当大牛的技术人员肯定也不是好的技术人员。 第一个谈到&amp;#34;架构师&amp;#34;的场合是在会议室和一位要好的同事讨论新项目的需求时，他感慨道...</description></item><item><title>无意中的Pair Programming</title><link>https://tonybai.com/2008/09/02/unexpected-pair-programming/</link><pubDate>Tue, 02 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/02/unexpected-pair-programming/</guid><description>Pair Programming, 结对编程是敏捷开发中一个重要的实践，并受到很多业界大师级人物的推崇。但是明知它对我们可能会很有帮助，但是如果推广、实践起来还是要突破各种束缚的，心理上的、流程规范上的等等。我想也许这也或多或少也和公司或者部门的开发文化有些关系。我很想去尝试，但是一直没有找到一个很好的机会，也没有找到&amp;#34;心仪&amp;#34;的Partner。 今天上午恰好要完成一个脚本的编写，这是一个升级产品时...</description></item><item><title>尝试Scrum中的Demo模式</title><link>https://tonybai.com/2008/08/27/try-demo-practice-of-scrum/</link><pubDate>Wed, 27 Aug 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/08/27/try-demo-practice-of-scrum/</guid><description>昨天，在下班前的一分钟，突然有一个想法：项目刚刚完成一个阶段性的任务，是否将项目组所有人召集在一起，每个人将自己在这个阶段做的东西向大家做一个展示呢？把这个想法和几个同事交换了一下意见，获得了支持。说做就做，恰好这段时间我一直尝试不断提高自己的执行力。遂在上午的一个短会上和大家道出了我的想法，并决定在今天就做这个演示活动。 这种想法其实不是什么独创，最近拜读了一本叫&amp;#34;硝烟中的Scrum和XP&amp;#34;的书...</description></item><item><title>CruiseControl.rb初体验</title><link>https://tonybai.com/2008/08/20/the-experience-of-cruisecontrol-rb/</link><pubDate>Wed, 20 Aug 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/08/20/the-experience-of-cruisecontrol-rb/</guid><description>我所在的项目一直以C语言作为主要开发语言，与做Java以及其他新兴语言的人不同，组内的同事似乎对新鲜的东西不是那么感兴趣，也没有主动去研究新鲜事物的意愿和意识。我深为此闹心，看到外面世界中那么多美妙的工具，再也不能坐以待毙了。我一直都是有很多想法的，但是迫于自身精力有限，自己无法全身投入，以前都是交予别人去做的，但是收到的效果都不是很好。认识到这点后，我决定自己动手，丰衣足食。 从心底一直对公司的...</description></item><item><title>switch语句性能考量</title><link>https://tonybai.com/2008/08/18/thoughts-on-the-performance-of-switch-case-statments/</link><pubDate>Mon, 18 Aug 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/08/18/thoughts-on-the-performance-of-switch-case-statments/</guid><description>每年都有应届毕业生来到公司，每年都要对新同事进行代码方面的培训，比如编码规范就是其中之一。编码规范初听起来比较新鲜，但是培训时间长了，显然有些乏味。今年我打算改变策略，让新同事结合已有规范文档和项目代码，自己先挖掘一遍，然后大家通过坐下来讨论的互动方式来加深对规范的理解，每次讨论时间限制在1 hour以内，不给大家打瞌睡的机会^\_^。 上周和新同事一起讨论表达式和语句，说到了switch和if，...</description></item><item><title>CHECKLIST的不实用之处</title><link>https://tonybai.com/2008/08/15/checklist-is-impractical/</link><pubDate>Fri, 15 Aug 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/08/15/checklist-is-impractical/</guid><description>CHECKLIST多是类似如下的东西，举一个代码CHECKLIST的例子： - 参数的书写是否完整？不要贪图省事只写参数的类型而省略参数名字。  - 参数命名、顺序是否合理？  - 参数的个数是否太多？  - 是否使用类型和数目不确定的参数？  - 是否省略了函数返回值的类型？  - 函数名字与返回值类型在语义上是否冲突？ 我们常常遇到的一个问题就是在进行source peer review的时候...</description></item><item><title>无线路由设置也'疯狂'(续)</title><link>https://tonybai.com/2008/08/15/configure-wireless-router-cont/</link><pubDate>Fri, 15 Aug 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/08/15/configure-wireless-router-cont/</guid><description>刚搬家，由于新的小区不在中国铁通的势力范围之内，所以无奈下只好硬着头皮去安装网通宽带，与铁通宽带不同的是网通宽带套餐必须绑定一部固话，估计这就是固网电信运营商开拓市场的一个卑鄙伎俩吧。铁通就可以不安装电话，直接通过跳线做。还有更严重的一点就是网通宽带贵，包一年比铁通要贵上300块；另外已经习惯了铁通的免费电影网站，网通的收费电影网站让我很是不适应。我又不喜欢用bt，以后看电影还是需要另寻门路了。 ...</description></item><item><title>关于宏定义切换以及屏蔽的例子</title><link>https://tonybai.com/2008/05/17/examples-for-macro-definition-switch-and-mask/</link><pubDate>Sat, 17 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/17/examples-for-macro-definition-switch-and-mask/</guid><description>assert是大家常用的宏，它的用法相信大家都有所了解。P.J Plauger的&amp;#34;The C Standard Library&amp;#34;一书中提到在源代码中切换assert宏定义的方法： /\* turn assertion on \*/ #undef NDEBUG #include /\* turn assertions off \*/ #define NDEBUG #include 我顺手写了一个例子...</description></item><item><title>也谈C语言标识符的NAMESPACE</title><link>https://tonybai.com/2008/05/15/also-talk-about-namespace-in-c/</link><pubDate>Thu, 15 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/15/also-talk-about-namespace-in-c/</guid><description>P.J Plauger的&amp;#34;The Standard C Library&amp;#34;一书的Chapter0的章后练习中有这样的一道题：编写一个包含如下一行语句的正确的程序： x:      ((struct x\*)x)-&amp;gt;x=x(5); 并描述这行语句中x的5种截然不同的use，这里其实涉及到这么一个知识或者说概念：C语言的命名空间(namespace)，在&amp;#34;C语言参考手册&amp;#34;中还被称作: overloadi...</description></item><item><title>也谈C语言变长参数</title><link>https://tonybai.com/2008/05/07/also-talk-about-c-variable-length-args/</link><pubDate>Wed, 07 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/07/also-talk-about-c-variable-length-args/</guid><description>很多技术人员都有在&amp;#34;技术细节&amp;#34;上&amp;#34;钻牛角尖&amp;#34;的&amp;#34;癖好&amp;#34;，对此很多人褒贬不一；无论怎样，我也是属于这类人。C语言的变长参数在平时做开发时很少会在自己设计的接口中用到，但我们最常用的接口printf就是使用的变长参数接口，在感受到printf强大的魅力的同时，是否想挖据一下到底printf是如何实现的呢？这里我们一起来挖掘一下C语言变长参数的奥秘。 先考虑这样一个问题：如果我们不使用C标准库(libc...</description></item><item><title>也谈typedef</title><link>https://tonybai.com/2008/05/02/also-talk-about-typedef/</link><pubDate>Fri, 02 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/02/also-talk-about-typedef/</guid><description>C语言语法简单，但内涵却博大精深；如果在学习时只是止步于表面，那么往往后期会遇到很多困难。typedef是C语言中一个很好用的工具，大量存在于已有代码中，特别值得一提的是：C++标准库实现中更是对typedef有着大量的使用。但很多初学者对其的理解仅局限于：typedef用来定义一个已有类型的”别名(alias)”。正是因为有了这样的理解，才有了后来初学者在typedef int myint和ty...</description></item><item><title>C单元测试之Mock Test篇</title><link>https://tonybai.com/2008/04/12/mock-test-in-c-unit-test/</link><pubDate>Sat, 12 Apr 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/04/12/mock-test-in-c-unit-test/</guid><description>曾经在多篇blog中报怨过：用C语言写业务逻辑实在是让人身心忐忑不安，再加之C语言自有的&amp;#34;特点&amp;#34;，让其与&amp;#34;单元测试&amp;#34;始终若即若离，曾经尝试过写了一个轻量级C Unit Testing lib，至少目前我依旧在用，但多用在编写独立算法以及底层库的场合。业务层少有使用。业务层多是遗留系统，当初前辈们设计时对可测性考虑不够周全，导致现在无法很好的将各个部分独立抽出进行测试，虽然我们也在做着类似&amp;#34;重构&amp;#34;的...</description></item><item><title>Mingle初体验</title><link>https://tonybai.com/2008/04/09/the-experience-of-mingle/</link><pubDate>Wed, 09 Apr 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/04/09/the-experience-of-mingle/</guid><description>本周一已经投奔ThoughtWorks的Dreamhead因公事回到沈阳，来到我们公司看望以前的同事。他谈到业界的一种说法：ThoughtWorks在&amp;#34;怎么做&amp;#34;上达到了很高的高度，但是在&amp;#34;做什么&amp;#34;上与Google这样的公司相比还有差距。既然ThoughtWorks在&amp;#34;怎么做&amp;#34;方面树立了榜样，那么这个公司推出的产品估计在&amp;#34;怎么做&amp;#34;上对其他公司也会有所指导^\_^。Mingle就应该是其中之一。 公司...</description></item><item><title>面对'破窗户'的无奈</title><link>https://tonybai.com/2008/03/28/the-helplessness-to-face-the-broken-window/</link><pubDate>Fri, 28 Mar 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/03/28/the-helplessness-to-face-the-broken-window/</guid><description>每天早晨都是坐公司的班车上班的，从家到公司大约需要40分钟，这段时间不短也不长。为了打发时间，也曾经想过要充分利用这段时间，我选择过听音乐、看书。但音乐听时间长了就听烦了；在车上看书时间长了还有些头晕，所以多数时间我还是选择&amp;#34;思考&amp;#34;。&amp;#34;思考&amp;#34;的同时，眼睛也一直在&amp;#34;欣赏&amp;#34;车窗外的风景。今天窗外一处新楼盘门市的两个破碎的窗户让我的&amp;#34;思考&amp;#34;有了方向。 建筑物上的几扇&amp;#34;破窗户&amp;#34;，很多人即使注意了，也会不以...</description></item><item><title>说说用xml做配置文件的优劣</title><link>https://tonybai.com/2008/03/24/the-benefits-of-using-xml-as-configuration/</link><pubDate>Mon, 24 Mar 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/03/24/the-benefits-of-using-xml-as-configuration/</guid><description>最近收到客户的一个需求，要求我们将产品的系统配置数据和业务配置数据定期导出备份，以防万一数据库宕掉后可以用来&amp;#34;救火&amp;#34;。产品从起初0.1版本就一直延续着一种&amp;#34;section-key-value&amp;#34;的配置文件方式，同时我们也有可复用的库来完成配置数据的读取，可是在长期的使用过程中我们发现的不少问题，特别是在存储多样化的业务数据的时候，这样的配置方式带来维护上的很大不便。 &amp;#34;section-key-val...</description></item><item><title>多行宏定义中的注释问题</title><link>https://tonybai.com/2008/03/14/the-problems-of-commenting-multiple-lines-macro/</link><pubDate>Fri, 14 Mar 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/03/14/the-problems-of-commenting-multiple-lines-macro/</guid><description>早上在写代码时遇到这样一个问题：即如何在一个拥有多行的宏定义中做注释？，这里把方法演化的过程贴出来，可能对某些朋友有些借鉴意义。 宏定义高深莫测，而且是比较细节的东西，详细说明请参见&amp;#34;C参考手册&amp;#34;之类的书籍。 在我的代码中，我大致要做这样一个简单的事情：printf(&amp;#34;%s%s%s\\n&amp;#34;, &amp;#34;hello&amp;#34;, &amp;#34;macro&amp;#34;, &amp;#34;yeah!&amp;#34;); &amp;#34;%s%s%s\\n&amp;#34;这个字符串中每一项输出都有一...</description></item><item><title>无线路由设置也'疯狂'</title><link>https://tonybai.com/2008/03/08/configure-wireless-router/</link><pubDate>Sat, 08 Mar 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/03/08/configure-wireless-router/</guid><description>无线路由设置本来是件很简单的事情，但今晚却让我吃尽了苦头，这里暂且用&amp;#39;疯狂&amp;#39;来形容吧，也许有些不当。自从买了D-Link 624+A无线路由器之后，在家里上网就一直使用它了。这之前一直是使用我的工作笔电单机访问，今天不知怎么心血来潮，拿出我自己的&amp;#39;古董本本&amp;#39;(和今天的本本性能做比较，我的本本也算是古董级的了，有些夸张^\_^)，来一个双机访问，按理说：只要在无线路由器上配置一个DHCP服务器就可以...</description></item><item><title>使用Ubuntu工作了一上午</title><link>https://tonybai.com/2008/02/27/work-on-ubuntu-this-morning/</link><pubDate>Wed, 27 Feb 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/02/27/work-on-ubuntu-this-morning/</guid><description>在公司里面，Windows还是一统天下的。人们已经熟悉了Windows上的各种软件和使用方法，特别是一些常用的配置管理工具，我们用的都是微软的产品，譬如Visual Source Safe，这给转到Ubuntu带来了一些麻烦，Ubuntu下虽然有Wine这个好工具，但是对于复杂的Windows软件来说，Wine的支持还是难以满足需求的。 在家里的时候一直都是用无线路由器上网的，开机登录桌面后无线就...</description></item><item><title>牢骚中体验Ubuntu</title><link>https://tonybai.com/2008/02/23/many-complaints-about-ubuntu/</link><pubDate>Sat, 23 Feb 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/02/23/many-complaints-about-ubuntu/</guid><description>春节过后，项目一直比较忙， 我的Ubuntu自从上周日安装到系统中后就一直没有怎么用过，好不容易盼到周末了，这回可有时间体验一下&amp;#39;热得烫手&amp;#39;的Ubuntu了。 Dreamhead在评论中给我的建议是:坚持使用Ubuntu，你就会越用越熟练的。这同样也是我的想法，所以首要的任务就是先体验一下Ubuntu，看其是否能满足我工作和平时娱乐的需要。 Linux总是让新手&amp;#39;迷路&amp;#39;,我所说的&amp;#39;迷路&amp;#39;是指在进入...</description></item><item><title>初装Ubuntu 7.10</title><link>https://tonybai.com/2008/02/17/install-ubuntu-7-10-the-first-time/</link><pubDate>Sun, 17 Feb 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/02/17/install-ubuntu-7-10-the-first-time/</guid><description>花了大半天时间备份数据，重装Windows后，终于可以安装Ubuntu了。Ubuntu 7.10的光盘在我的抽屉里都躺了多个月了，今天终于有了用武之地了。因为有了移动硬盘，我将笔记本硬盘的一个分区腾了出来，用来安装Ubuntu，分区大约20G，分出10个G来挂载/，1个G做SWAP分区，剩下一个FAT32分区存用户数据。 IBM Thinkpad笔记本向来对Linux的兼容性就很好，我这次安装也印...</description></item><item><title>共享库中的符号链接</title><link>https://tonybai.com/2008/02/03/symbol-linkage-in-shared-library/</link><pubDate>Sun, 03 Feb 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/02/03/symbol-linkage-in-shared-library/</guid><description>清晨，部门新来的一位小兄弟打来求助电话，说是系统启动的时候出现类似：&amp;#34;ld.so.1: testmain: 致命的: 重定位错误: 文件./libtestshared.so: 符号static\_add: 参照的符号没有找到&amp;#34;的错误。这个系统是05年开发的一个复用度很高的自研产品，后续项目只需在其基础上做少量二次开发工作即可满足新功能的要求。为了做到一定的通用性，我们使用了类似插件的框架，这样系统...</description></item><item><title>查表法求解'自然数对'问题</title><link>https://tonybai.com/2008/01/29/use-searching-table-to-solve-natural-number-pair-problem/</link><pubDate>Tue, 29 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/29/use-searching-table-to-solve-natural-number-pair-problem/</guid><description>‘自然数对’是这样的一对自然数，他们的和与差的结果都是平方数，比如：自然数对32和68，根据定义32+68 = 100 = 10^2，68-32 = 36 = 6^2。现在的题目是：根据输入的两个100以内的自然数，打印出这两个整数之间的所有自然数对。 这道题不难，而且限制了范围，在两个100以内的自然数区间，很多人马上就能给出程序。这道题的有两个点需要思考：一个是关于平方数的判断；另一个就是两个...</description></item><item><title>三角形输出问题考量</title><link>https://tonybai.com/2008/01/27/solve-triangle-print-problem/</link><pubDate>Sun, 27 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/27/solve-triangle-print-problem/</guid><description>相信很多人在初学某门计算机语言的时候都会做过类似的题目：在控制台上输出用特定字符&amp;#39;拼&amp;#39;出来的某种图形，比如下面的这种三角形：     \*    \*\*\*   \*\*\*\*\*  \*\*\*\*\*\*\* \*\*\*\*\*\*\*\*\* 这样的问题应该算是入门级的了，大多人都是看之，做之，忘之，而今天我就拿这种入门级的题目说事，小问题里也许内含有大道理。 昨晚无意中在编程爱好者论...</description></item><item><title>开发程序不能太'单纯'</title><link>https://tonybai.com/2008/01/23/programmers-should-not-be-too-pure/</link><pubDate>Wed, 23 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/23/programmers-should-not-be-too-pure/</guid><description>昨天凌晨，突然接到云南移动哥们的电话，说他们正在进行的全网割接出现了问题，当时只有我们的产品遇到这样的问题，其他省的其他厂商的产品都已经顺利通过测试了。迷迷糊糊的我无奈的起床，开机，查找问题，这也让我体会到了这几天北方的夜晚的冷啊。 花了一段时间对底层的协议包进行了分析，发现我们产品发出去的消息包的那个域后面的确随机的分布着一些乱码字符。譬如我们的消息发送的目的地址是1069999333(Goog...</description></item><item><title>推进项目改进，难!</title><link>https://tonybai.com/2008/01/22/difficult-to-reform-in-current-project/</link><pubDate>Tue, 22 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/22/difficult-to-reform-in-current-project/</guid><description>自从去年年初搬到新办公室后，各个项目组都分到了各个独立的空间了，平时&amp;#39;抬头不见低头见&amp;#39;的情形减少了，随意拉把椅子坐下来谈技术的情形也减少了，随之而来的是项目组&amp;#39;各自为战&amp;#39;，经过近一年的发展，各个项目组在局部的发展上已经出现差异了。 在现在带的这个项目之前，曾经有意识的去了解了一下其他组的技术发展情况，主要是针对Java开发这块。了解的结果让我意识到我们组的Java开发已经&amp;#39;落后&amp;#39;了。其实我们组的J...</description></item><item><title>都是病毒惹得祸</title><link>https://tonybai.com/2008/01/18/a-disaster-caused-by-virus/</link><pubDate>Fri, 18 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/18/a-disaster-caused-by-virus/</guid><description>上周日下午，接到同事的一个寻求支持的电话，原来是部门以前给中国联通做的一个运行在PC服务器上的程序在每天凌晨出现&amp;#39;挂死&amp;#39;情况，导致程序运行中断，问题连续几天复现。程序是老程序，在不下十多个省运行，一直都很稳定。通过联通的人发过来的截图，很难定位问题所在，所以只能打车到了联通机房现场查看了。 还是那句话，维护别人的又是自己不熟悉的程序那真是痛苦的，好久都不在Windows上写程序、调程序了，API都...</description></item><item><title>QA人员一定要有实际项目经验</title><link>https://tonybai.com/2008/01/07/qa-must-have-experience-in-real-project/</link><pubDate>Mon, 07 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/07/qa-must-have-experience-in-real-project/</guid><description>最近一段时间正处于项目策划阶段，这个阶段势必要和部门QA打交道，咨询问题并获取支持。按照我们公司的软件开发流程，策划阶段要输出一系列文档的。这些文档都是有公司模板或者是经部门裁剪后模板作为基础的，所以现在项目前期策划基本上就是按照自己的思路填写文档，估计很多公司也都是这么做的。 好不容易花了一个星期的时间把这些文档&amp;#39;填全&amp;#39;了。提交给QA，让之帮忙审审。QA的一封邮件回来，问题多多。 当我看到这些Q...</description></item><item><title>也谈’SIGBUS和SIGSEGV’</title><link>https://tonybai.com/2007/12/19/also-talk-about-sigbus-and-sigsegv/</link><pubDate>Wed, 19 Dec 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/12/19/also-talk-about-sigbus-and-sigsegv/</guid><description>SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信号。内存问题一直是最令我们头疼的事情，弄清楚两个信号的发生缘由对我们很好的理解程序的运行是大有裨益的。 我们来看两段程序： //testsigsegv.c int main() {         char \*pc = (char\*)0×00001111;         \*pc = 17; } //testsigbu...</description></item><item><title>一个很有意思的Bug</title><link>https://tonybai.com/2007/12/18/an-funny-bug/</link><pubDate>Tue, 18 Dec 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/12/18/an-funny-bug/</guid><description>这个Bug源于昨天凌晨的一次版本升级失败。睡了一大觉后，下午回到公司，重现了这个问题并找到了原因，发现这的确是一个&amp;#39;很有意思的Bug&amp;#39;。 系统在从数据库初始化过程中遇到了问题：在读取数据库数据时，提示ORA-24373错误。手册上对ORA-24373的解释是这样的： ORA-24373: invalid length specified for statement Cause: The lengt...</description></item><item><title>'符号连接'那些事儿</title><link>https://tonybai.com/2007/12/08/those-things-about-symbol-linkage/</link><pubDate>Sat, 08 Dec 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/12/08/those-things-about-symbol-linkage/</guid><description>我们在编译自己开发的程序或者一些开源软件的时候，常常遇到类似如下的编译器错误信息： 未定义 文件中的 符号 在文件中 i /var/tmp//ccU4sj6I.o func /var/tmp//ccU4sj6I.o ld: 致命的: 符号参照错误. 没有输出被写入a.out collect2: ld returned 1 exit status 或&amp;#34;undefined reference to &amp;#39;...</description></item><item><title>回顾TCP协议那些事儿</title><link>https://tonybai.com/2007/12/06/review-tcp-protocol/</link><pubDate>Thu, 06 Dec 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/12/06/review-tcp-protocol/</guid><description>我不是计算机科班出身。记得大学的时候旁听计算机系的网络课，当时计算机系使用教材是&amp;#34;计算机网络–自顶向下方法与Internet特色&amp;#34;的影印版，这本教材与众不同的一个地方就是作者JAMES F.KUROSE和KEITH W.ROSS采用了&amp;#39;自顶向下&amp;#39;的编排思路，先从应用层开始，最后讲到物理层。而且这本书在语言上形象生动，通俗易懂。只怪我当初没有一心一意听讲，到现在存在我的脑子中的基本概念居多，深刻理解...</description></item><item><title>也谈'万能'栈</title><link>https://tonybai.com/2007/11/27/also-talk-about-univerisal-stack/</link><pubDate>Tue, 27 Nov 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/11/27/also-talk-about-univerisal-stack/</guid><description>在网上搜索&amp;#34;万能&amp;#34;二字的英文翻译，结果却无意中看到有人提到了如何设计&amp;#34;万能栈&amp;#34;。栈(stack)是比较基础(fundamental)的数据结构，实现起来一般都比较容易。但一般的栈(stack)的实现都是局限于某种特定类型的，比如一个存储32-bit整型的栈。如果对于同一份栈实现，要求可以存储多种数据类型的话，那就需要仔细想想了。而这样的栈实现也就被戏称&amp;#34;万能&amp;#34;栈。 这里对&amp;#34;万能&amp;#34;栈再做一个分类：同...</description></item><item><title>又获Ubuntu 7.10光盘</title><link>https://tonybai.com/2007/11/25/got-ubuntu-7-disc/</link><pubDate>Sun, 25 Nov 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/11/25/got-ubuntu-7-disc/</guid><description>Mark Shuttleworth，Ubuntu的创始人，给了Ubuntu爱好者一个免费获取Ubuntu光盘的机会，自从去年年初收到一次Ubuntu 5.10的光盘后，昨天我又拿到了最新的Ubuntu 7.10的光盘。 去年的光盘数目很多，估计当时的Canonical是为了扩大自己的linux distribution的影响，在&amp;#34;shipit&amp;#34;页面上鼓励你多多索取光盘。也正如Canonical所期...</description></item><item><title>面对'错误'的抉择</title><link>https://tonybai.com/2007/11/13/the-choice-when-dealing-with-errors/</link><pubDate>Tue, 13 Nov 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/11/13/the-choice-when-dealing-with-errors/</guid><description>大凡写程序者，都会遇到错误； 大凡写程序者也都知道两种错误处理的机制：传统的&amp;#39;错误码返回机制&amp;#39;和&amp;#39;面向对象语言引入的异常处理机制&amp;#39;。 人们常常会在这两种机制之间徘徊不定，难以抉择。但有两类人大可不必为此头痛，他们是坚决只使用&amp;#39;错误码返回机制&amp;#39;的人，和坚决只使用&amp;#39;异常处理机制&amp;#39;的人。而苦就苦了摇摆在中间，思索不定的那些人了。这群人有一个特点就是不停的问：&amp;#34;什么是异常？什么时候该使用错误码返回？什么时...</description></item><item><title>遭遇Heap溢出</title><link>https://tonybai.com/2007/11/10/debug-heap-overflow/</link><pubDate>Sat, 10 Nov 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/11/10/debug-heap-overflow/</guid><description>今天凌晨配合云南移动进行局数据全量升级，本来以为是件很轻松的活计，甚至不需要我动手的事情，结果却又是一次惨痛的教训啊。 这个活计其实真的很简单，就是将数据库中的旧数据全部删除，然后导入新的数据，由于数据量较大需要重启一次我们的系统。问题就在重启系统上。摆在我面前的就是&amp;#34;重启失败&amp;#34;，系统dump一个core文件。通过pstack和gdb查看如下： core &amp;#39;core&amp;#39; of 7971: xxxxx...</description></item><item><title>在Solaris上编译Ethereal的注意事项</title><link>https://tonybai.com/2007/11/08/some-notice-about-building-ethereal-on-solaris/</link><pubDate>Thu, 08 Nov 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/11/08/some-notice-about-building-ethereal-on-solaris/</guid><description>自从上次&amp;#39;编译Ethereal On Windows&amp;#39;之后，好久没有接触Ethereal了，前期策划的基于Ethereal开发的一个工具的任务就落到了这批来的一个新员工的头上了。第一阶段他在Windows上开发了一个基于Ethereal的插件用于分析CMPP协议之用；第二个阶段我们需要移植到Unix上，我们使用的是Solaris。 目标机器是一个x86的Solaris10的系统，首先是将Ether...</description></item><item><title>也谈计算机字符编码</title><link>https://tonybai.com/2007/11/03/also-talk-about-char-encoding/</link><pubDate>Sat, 03 Nov 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/11/03/also-talk-about-char-encoding/</guid><description>以前真的未就计算字符编码有过什么深入的学习探究，这次学习也是源于客户的一次投诉。客户的投诉简要来说就是：我们的网关在截断客户发的长度越限的短信内容时，导致该短信在终端上显示为乱码。顺着这个起因，我花了一些时间概要性的学习了一些关于计算机字符编码的常识性知识。 字符，这个我们在平时编码过程中最最常见的元素，其实也有着一段小故事。 计算机，毫无疑问是一部机器，在最初我们接触计算机时或者接收计算机教育时...</description></item><item><title>浅谈如何编码使程序更易维护</title><link>https://tonybai.com/2007/09/30/thoughts-on-how-to-make-code-more-maintainable/</link><pubDate>Sun, 30 Sep 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/09/30/thoughts-on-how-to-make-code-more-maintainable/</guid><description>毕业后就一直从事于服务器端程序的开发，主要客户是中国移动，大家知道移动的产品都是电信级的，稍出差错后果都是严重的，所以在我们平时的工作中除了研发之外，还有的就是对我们卖给移动的产品的维护性工作，而这种维护性工作要求就是要&amp;#34;迅速解决现场的问题&amp;#34;。这几个月维护工作占据了我很大一部分精力，说实话，有些烦了，但是从另外一个角度来看，也说明了我们的产品在维护性方面做的不够好，否则移动的工作人员或当地的技术支...</description></item><item><title>成功Build ACE</title><link>https://tonybai.com/2007/06/14/build-ace-successfully/</link><pubDate>Thu, 14 Jun 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/06/14/build-ace-successfully/</guid><description>近期公司实行新的绩效考核机制，我的考核目标中就有一项叫做：&amp;#34;成功使用新技术、框架、思路等至少3个&amp;#34;，呵呵，先不论绩效考核机制是否合理，既然已经这样了那就需要去适应。一直在做Network Application，早就知道ACE在业界中的名气，这回有理由找个时间好好挖掘一下ACE的思路，也为我的绩效目标增色啊^\_^。 以上只是开个玩笑罢了。上周末去书店看到电子工业出版社再次出版的&amp;#39;C++网络编程卷...</description></item><item><title>开发人员之维护他人项目有感</title><link>https://tonybai.com/2007/05/25/thoughts-on-maintain-projects-of-others/</link><pubDate>Fri, 25 May 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/05/25/thoughts-on-maintain-projects-of-others/</guid><description>软件行业人员流动比较频繁，如果你是一个公司的老员工，你常常会有如此经历：一个同事即将离职，领导可能分配你去与之进行工作交接，有时他做过的项目很可能和你做过的有很大差距，没办法领导发话了，你还是要硬着头皮接下来，心中盘算着但愿这个项目的产品在现场运行不要出现什么问题或者用户最好一个新需求都不要提，这样就算是挂个名，也没什么大不了的。 可是事情往往是事与愿违，需求变化速度之快让你猝不及防，这时如果你接...</description></item><item><title>数的圆整算式</title><link>https://tonybai.com/2007/05/24/number-round-up-formula/</link><pubDate>Thu, 24 May 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/05/24/number-round-up-formula/</guid><description>一般在考虑到内存对齐的程序里面势必要使用数的圆整算式，一般来说在计算机程序里一般都是圆整到2的次幂上，而很多书上也有很多基于&amp;#39;移位&amp;#39;操作的圆整到2的次幂上的算法公式，形式都是很简单的，很实用。 这里要说的是一个圆整到任意正整数(n &amp;gt; 1，圆整到1没有必要^\_^)的算式，突然觉得如果说算法有些大了。我们来推导一下，也不是严密推导。就是怎么想的怎么说。 如果有两个正整数a、b，其中a &amp;gt;= 1, ...</description></item><item><title>C++咬文嚼字-'Pointer Trick'</title><link>https://tonybai.com/2007/05/22/cpp-weigh-every-word-series-pointer-trick/</link><pubDate>Tue, 22 May 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/05/22/cpp-weigh-every-word-series-pointer-trick/</guid><description>晚上饭后抽空看了看如何实现一个内存管理器，涉及内存操作必定少不了指针，恰研究到offsetof这个operator，也看了它的实现，顿有所悟。 先看一段代码： struct Foo {         int     a;         char\*   p;         char    b; }; Foo\* p1 = reinterpret\_cast(0); Foo\* p2 = 0;...</description></item><item><title>工厂模式三剑客</title><link>https://tonybai.com/2007/05/21/the-three-musketeers-of-factory-pattern/</link><pubDate>Mon, 21 May 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/05/21/the-three-musketeers-of-factory-pattern/</guid><description>前不久参加了一个为期四天的设计模式培训，公司以前组织过很多次设计模式培训，主题多为&amp;#39;Java与设计模式&amp;#39;，自己一直从事C相关的开发，也就不好越界参与这类培训。而这次主题换成了&amp;#39;C++设计模式&amp;#39;，我参加也就名正言顺了。按照人力资源部工作人员的说法这是第一次请老师讲C++与设计模式，这个老师也是第一次给我们公司做培训，因为没有先例，无从知道效果如何，不像以前侯捷来公司培训C++，一般参与的同事都清楚那...</description></item><item><title>C++咬文嚼字-'Functions'</title><link>https://tonybai.com/2007/03/13/cpp-weigh-every-word-series-functions/</link><pubDate>Tue, 13 Mar 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/03/13/cpp-weigh-every-word-series-functions/</guid><description>关于Functions，Bjarne Stroustrup在&amp;#39;The C++ Programming Language&amp;#39;一书中是这么开篇的：&amp;#39;The typical way of getting something done in a C++ program is to call a function to do it.&amp;#39;；另外他还阐述了一个使用Functions的原则：&amp;#39;A function c...</description></item><item><title>C++咬文嚼字-'Evil cast'</title><link>https://tonybai.com/2007/03/12/cpp-weigh-every-word-series-evil-cast/</link><pubDate>Mon, 12 Mar 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/03/12/cpp-weigh-every-word-series-evil-cast/</guid><description>Cast也被称为&amp;#34;Explicit Type Conversion&amp;#34;，即显式类型转换，在传统C中强制转型(cast)只有一种语法形式(T)e。Bjarne Stroustrup在&amp;#39;The Design and Evolution of C++&amp;#39;(以后称作D&amp;amp;E)一书的14.3小节开始就说了&amp;#39;无论是从语法还是从语义上, Cast都是C++里最难看的特征之一&amp;#39;，所以他要为cast提供A New Cas...</description></item><item><title>C++咬文嚼字-'0 or NULL'</title><link>https://tonybai.com/2007/03/10/cpp-weigh-every-word-series-0-or-null/</link><pubDate>Sat, 10 Mar 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/03/10/cpp-weigh-every-word-series-0-or-null/</guid><description>C程序员和C++程序员在声明空指针时做法常常是不相同的。 C程序员常常如下做： int \*ptr = NULL; C++程序员则是听从Bjarne Stroustrup或者其他C++大师的教诲，坚定地如下做： int \*ptr = 0; 也许没有谁对谁错之分，也许只是习惯不同罢了，毕竟C语言是老大哥，诞生的早；而在早期C编程时人们也许不习惯在程序里使用0这样的magic number，转而使用...</description></item><item><title>C++咬文嚼字－'Hijack const'</title><link>https://tonybai.com/2007/03/09/cpp-weigh-every-word-series-hijack-const/</link><pubDate>Fri, 09 Mar 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/03/09/cpp-weigh-every-word-series-hijack-const/</guid><description>晚上无意翻看Bjarne Stroustrup的&amp;#39;The C++ Programming Language Special Edition&amp;#39;(英文版)第94页，章节5.4 Constants一节，看到这么一句原文&amp;#39;C++ offers the concept of a user-defined constant, a const, to express the notion that a valu...</description></item><item><title>工作中的故事-0是'TRUE'还是'FALSE'？</title><link>https://tonybai.com/2007/01/17/zero-is-true-or-false/</link><pubDate>Wed, 17 Jan 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/01/17/zero-is-true-or-false/</guid><description>这个故事源于今天测试组测出的一个BUG，BUG被测试人员转给了我，故事便从这里开始了。 我们的系统是一个后台服务器程序，用C写的，运行在Solaris上，数据存储在数据库中，每次系统启动都要从数据库中读取配置数据。系统根据配置数据对输入的消息数据进行处理。今天的这个BUG现象就是对于一定的输入消息，系统根据配置数据的指导进行处理，结果得到的结果本应该是A，但是却得到了B。 首先咱抱着谨慎负责的态度...</description></item><item><title>编译Ethereal On Windows</title><link>https://tonybai.com/2006/12/30/build-ethereal-on-windows/</link><pubDate>Sat, 30 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/30/build-ethereal-on-windows/</guid><description>最近在研究项目下一期中新增的信令跟踪功能，在这个开源盛行的时代，开源工具当然是首选。我们发现了Ethereal，一款强大的网络分析工具包。我们不仅仅要使用Ethereal，而是在Ethereal上做二次开发，增加一个新dissector或者一个plugin，用来分析我们自己的应用层协议。 之所以选择Ethereal还有一个很重要的原因就是它已经支持300多个协议包了，这说明Ethereal的框架已...</description></item><item><title>从本源看世界-读'Write Great Code'</title><link>https://tonybai.com/2006/12/22/write-great-code-reading-note/</link><pubDate>Fri, 22 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/22/write-great-code-reading-note/</guid><description>以前曾经说过自己并非计算机科班出身。想想自己在大学时的学习过程未免有些底气不足，记得当时一直坚持去旁听计算机专业的课，但是鉴于本专业老师的点名和课堂作业，自己未免耽误了很多节课，弄得自己学的很不系统，效果不是很好。工作后一直从事应用级的开发，对计算机方面基础的本源性的知识也逐渐陌生起来。但我是那种知其然也要知其所以然的人，这两年也不间断的买了不少讲解计算机底层知识的书，目的是让那些计算机本源性的东...</description></item><item><title>'画蛇添足'招致的BUG</title><link>https://tonybai.com/2006/12/21/a-bug-caused-by-gild-the-lily/</link><pubDate>Thu, 21 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/21/a-bug-caused-by-gild-the-lily/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>疏忽大意招致恼人'BUG'</title><link>https://tonybai.com/2006/12/16/a-bug-caused-by-carelessness/</link><pubDate>Sat, 16 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/16/a-bug-caused-by-carelessness/</guid><description>河南项目实施，一波刚平一波又起呀！ 前天凌晨，河南又割入很多家SP，昨天早晨上班通过日志发现程序的一个子模块进程隔一段时间重启若干次，通常是每一批数据推过来，就有一次重启的过程，日志中没有打印出出错的标志，进程莫名奇妙的就宕掉了，查看程序环境也没有发现CORE文件或者.assert文件，在代码关键的退出区域加入打印日志，重启系统后仍然有同样的问题。郁闷呀，没办法，在家里搭建测试环境，模拟测试，测试...</description></item><item><title>一个'莫须有'的BUG</title><link>https://tonybai.com/2006/12/11/a-unwarranted-bug/</link><pubDate>Mon, 11 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/11/a-unwarranted-bug/</guid><description>上周三晚，河南’前线’反馈，河南移动手机用户投诉，经查是话单丢失。查看后的确有蹊跷，按照数据库中录入的原始话单数据来看，这几条记录的确是该生成话单的。之后又有同事发现出现丢话单的问题不仅仅这几条，而是一批一批的。没什么头绪，一夜无话，周四发现每天入库的可生成话单记录数居然比话单多出100万，也就是说我的程序居然少生成了100万话单，按照一条记录1角钱，这也是10万块呀，事情紧迫，问题查找的历程开始...</description></item><item><title>三谈内存对齐－背后的故事</title><link>https://tonybai.com/2006/12/08/talk-about-memory-alignment-the-3rd-time/</link><pubDate>Fri, 08 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/08/talk-about-memory-alignment-the-3rd-time/</guid><description>记得以前曾经两次谈到过内存对齐话题，一次在&amp;#39;也谈内存对齐&amp;#39;一文中，另一次则是&amp;#39;也谈内存对齐(续)&amp;#39;，今天下午和同事又谈到内存对齐的问题了，遂想继续挖掘下去，看看其背后的故事。 关于内存对齐的中文文章多在介绍对齐的&amp;#39;法则&amp;#39;，比如为什么sizeof(T)和我们估计的T的大小有出入呢等等，而对于内存对齐的本质少有介绍，我在Google上搜索了一阵后，在IBM开发社区上发现一篇叫&amp;#39;Data alignme...</description></item><item><title>挖掘一下C语言中的多维数组</title><link>https://tonybai.com/2006/11/29/understand-multiple-dimension-array-in-c/</link><pubDate>Wed, 29 Nov 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/11/29/understand-multiple-dimension-array-in-c/</guid><description>好久没有看技术类的书籍了，今晚恰看到以前不知什么时候下到的一本oreilly的叫’mastering algorithms with c’的书，从书名可以看出这是一本讲算法的书，不过由于是选用了C语言作为讲解语言，所以难免不说说C语言。其中看到一节讲指针和数组，恰好碰到书中说: a\[i\]\[j\] \*(\*(a+i) + j)，这个等价式看起来显而易见，但是还是有些东西值得挖掘一下的。 我们...</description></item><item><title>Goto也有它的好</title><link>https://tonybai.com/2006/10/17/goto-also-has-beneift/</link><pubDate>Tue, 17 Oct 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/10/17/goto-also-has-beneift/</guid><description>最近真是忙的昏头转向，再加上天气逐渐转冷，很是有些不爽。今天dreamhead提醒我好久不更新Blog了，我也想更新，但是写点什么呢，工作相关的吧。 今天抽出一点儿时间来改一个系统的大Bug，这个问题早已定性，只是由于修改工作量较大，范围较广，而不敢轻易修改。不过眼看系统要上线测试，不改也不行了。 问题主要是由于系统锁资源使用不当，导致有时一些指针在无锁保护的情况下’裸奔’，解决方案就是在业务一层...</description></item><item><title>不完备库接口带来的隐患</title><link>https://tonybai.com/2006/09/09/hidden-danger-introduced-by-uncompleted-interface/</link><pubDate>Sat, 09 Sep 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/09/09/hidden-danger-introduced-by-uncompleted-interface/</guid><description>最近自己曾经辛苦耕耘过的两个项目同时上线，相关问题也就逐渐暴露出来。工作这两年多时间以后，使我有这样感觉：’测试永远都是不完备的’，有些问题只能在商用过程中发现，呵呵，明确一点啊我不是搞测试的:) 在解决问题过程中的感悟往往是最深刻的，解决问题的过程往往真的像是警察在侦破案件，往往一点点罪犯留下的蛛丝马迹就会让神探们找到线索，并迅速破案。 最近两天一直在一个bug上煎熬着，终于于昨天发现蛛丝马迹并...</description></item><item><title>小心'溢出'陷阱</title><link>https://tonybai.com/2006/09/06/be-careful-of-the-trap-of-overflow/</link><pubDate>Wed, 06 Sep 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/09/06/be-careful-of-the-trap-of-overflow/</guid><description>这几天以前曾经做过的一个项目上线测试了，果不其然，没有经过’战争洗礼’的产品就是靠不住，这不出了若干问题。害得我逃了半天课远程支持。 其中的一个问题很值得思考。其所在的模块并非是一个核心功能模块，而是一个提高系统Availability的一个功能模块，主要功能就是监视磁盘占用率。我们通过配置给出允许使用的磁盘空间大小(以M Byte为单位)，以及两个阈值，即当占用率达到多少的时候，Do A；达到多...</description></item><item><title>P.J.Plauger版本C标准库实现分析之'ctype.h'</title><link>https://tonybai.com/2006/07/17/plauger-c-standard-lib-ctype-header/</link><pubDate>Mon, 17 Jul 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/07/17/plauger-c-standard-lib-ctype-header/</guid><description>如果在你的源代码中经常见到如下代码： /\* To Identify a letter \*/ if ((i &amp;gt;= &amp;#39;a&amp;#39; &amp;amp;&amp;amp; i = &amp;#39;A&amp;#39; &amp;amp;&amp;amp; i = &amp;#39;0&amp;#39; &amp;amp;&amp;amp; i &amp;lt;= &amp;#39;9&amp;#39;) 这说明你对头文件理解的不是很好，而也恰恰是为了减少代码中重复出现的各种&amp;#39;字符分类&amp;#39;代码而设置的。 中的接口常用来进行数据的校验和分类，如在我们的项目中它常被用来校验原始数据的&amp;#39;符合性&amp;#39;。比如说一个11位的手...</description></item><item><title>P.J.Plauger版本C标准库实现分析之'assert.h'</title><link>https://tonybai.com/2006/07/08/plauger-c-standard-lib-assert-header/</link><pubDate>Sat, 08 Jul 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/07/08/plauger-c-standard-lib-assert-header/</guid><description>I believe that seeing a realistic implementation of the Standard C library can help you better understand how to use it.                                                                                ...</description></item><item><title>'寓教于乐'学Ruby</title><link>https://tonybai.com/2006/06/28/learn-ruby-in-amusement/</link><pubDate>Wed, 28 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/28/learn-ruby-in-amusement/</guid><description>在2005年初曾经写过一篇文章叫&amp;#39;结识Ruby&amp;#39;，当时的确是刚刚结识Ruby这种语言，好奇心使然，遗憾的是之后没有坚持学习下去，也就是在这一年Ruby获得了很大的发展，特别是Ruby On Rails的出现让Ruby一下成为新兴语言的代表，甚至有人预言Ruby将会成为Java的替代者成为下一代主流语言。无论如何，Ruby的日益被广大开发人员所接受是个不争的现实，就连Martin Fowler到中国...</description></item><item><title>字符串拷贝密码</title><link>https://tonybai.com/2006/06/26/the-secret-of-string-copy/</link><pubDate>Mon, 26 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/26/the-secret-of-string-copy/</guid><description>在近期的一次工作交接中，在我的代码中发现了很多’安全隐患’，主要是以’字符串拷贝’为主。这种安全漏洞在C编程中是较为常见的，防范起来也较为容易，这里我们就来一起探索一下’字符串拷贝’的’密码’。 在正常情况下，我们在考量目的缓冲区大小时都会以源缓冲区大小作为依据的，一般会适当的比源缓冲区多出一些空间，其中一种’居中’状况：即sizeof(dstbuf) = strlen(srcbuf) + 1。 ...</description></item><item><title>解决算法分析中递归问题的方法</title><link>https://tonybai.com/2006/06/21/solve-recursion-problem-when-doing-algorithm-analysis/</link><pubDate>Wed, 21 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/21/solve-recursion-problem-when-doing-algorithm-analysis/</guid><description>当一个算法(如二分查找)中包含对自己的递归调用时，关于这个算法时间复杂性的分析最终都转化为一个递归方程的求解问题，而这样的算法不在少数。实际上这是数学领域的问题，但是计算机科学又怎么能脱离数学而存在呢？^\_^ 数学是好东西呀，可惜自己在这方面造诣颇浅，今生之遗憾亚。^\_^ 还好，解决递归方程涉及的数学知识我还是能应付的了的^\_^。在MIT算法导论中介绍了3种方法，我们这里就说说这三种方法！这...</description></item><item><title>理解’位域’</title><link>https://tonybai.com/2006/06/19/understand-bit-fields/</link><pubDate>Mon, 19 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/19/understand-bit-fields/</guid><description>这也是在ChinaUnix上看了几篇关于C语言&amp;#39;位域(Bit Fields)&amp;#39;的帖子之后，才想写下这篇文章的。其实在平时的工作中很少使用到&amp;#39;位域&amp;#39;，我是搞服务器端程序设计的，大容量的内存可以让我毫不犹豫的任意&amp;#39;挥霍&amp;#39;^\_^。想必搞嵌入式编程的朋友们对位域的使用应该不陌生吧。这里我也仅仅是凭着对C语言钻研的兴趣来学习一下&amp;#39;位域&amp;#39;的相关知识的，可能有些说法没有实践，缺乏说服力。 具体也不是很清楚当年...</description></item><item><title>当数组访问越界后</title><link>https://tonybai.com/2006/06/16/after-array-index-overflow/</link><pubDate>Fri, 16 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/16/after-array-index-overflow/</guid><description>下午到ChinaUnix C/C++版看了看，发现一个比较有意思的问题，一位兄弟在其帖子中问一段很简单的程序明显有数组越界访问之错误，可程序为什么运行起来却’安然无恙’，我看看了看，也给出了我自己的回复，晚上下班后又想想了这个问题，决定写一篇blog说说。 这位仁兄的程序(据他个人说来源自’GNU/Linux编程指南’)是这样的： #define BIGNUM 50 void index\_to\...</description></item><item><title>也谈内存对齐(续)</title><link>https://tonybai.com/2006/06/14/also-talk-about-memory-alignment-cont/</link><pubDate>Wed, 14 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/14/also-talk-about-memory-alignment-cont/</guid><description>关于内存对齐的话题，始终是敏感的。稍有不慎，必将闯下大祸！最近项目稍显轻闲，自己给自己安排一天反思和总结一下，突然想到以前写过的一篇&amp;#39;也谈内存对齐&amp;#39;，那篇文章谈的是内存对齐的基本知识以及一些实验的数据，想必很多人看完后，会收获一些东西，但是对内存对齐的应用还是处于懵懂状态，其实大部分时间我们是不会显式的用到&amp;#39;内存对齐的&amp;#39;，但是有些时候我们需要这样做。这里做了一个小例子，希望能给大家以启发。 例子是...</description></item><item><title>线程函数参数引发的问题</title><link>https://tonybai.com/2006/06/07/a-problem-caused-by-thread-func-argument/</link><pubDate>Wed, 07 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/07/a-problem-caused-by-thread-func-argument/</guid><description>上午我们的一个实施组从现网发回来一封邮件，接到这种邮件一般都是报告问题的，果然不出所料，现场出现一个core，经过分析这是个由于线程函数参数存储位置不当造成的，从中我们可以总结出一些经验，以避免以后再犯。 我采用下面的一个例子来模拟问题的出现： #include #include #include typedef struct foo {         char c\[10\];        ...</description></item><item><title>美妙的文件描述符传递</title><link>https://tonybai.com/2006/06/01/passing-file-descriptor/</link><pubDate>Thu, 01 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/01/passing-file-descriptor/</guid><description>我们知道父进程在子进程被fork出来之前打开的文件描述符是能被子进程继承下来的，但是一旦子进程已经创建后，父进程打开的文件描述符要怎样才能传递给子进程呢？Unix提供相应的技术来满足这一需求，这就是同一台主机上进程间的文件描述符传递，很美妙而且强大的技术。 想象一下我们试图实现一个服务器，接收多个客户端的连接，我们欲采用多个子进程并发的形式来处理多客户端的同时连接，这时候我们可能有两种想法： 1、...</description></item><item><title>代码评审很必要</title><link>https://tonybai.com/2006/05/31/code-review-is-necessary/</link><pubDate>Wed, 31 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/31/code-review-is-necessary/</guid><description>记得刚到公司做第一个项目时，mentor要和我一起看看我刚实现完的一些代码，当时有些不解，难道是不相信我写的代码么？最后事实证明：我的代码中有很多缺陷，有的还是很严重的缺陷。后来知道这个过程叫’代码评审’，是保证软件质量的一种手段，而且是很重要的一种手段。代码评审的形式有多种，最正式的一种就是召集公司或者部门的一些’大牛’们，围坐在会议室中，一行一行的审查你的代码；简单的形式就像我和mentor做...</description></item><item><title>小心库函数调用的'陷阱'</title><link>https://tonybai.com/2006/05/31/take-care-of-trap-when-invoking-lib-functions/</link><pubDate>Wed, 31 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/31/take-care-of-trap-when-invoking-lib-functions/</guid><description>下午一同事发现代码中的一处问题，问题的现象是这样的：这位同事调用了一部门基础库函数，当使用32位编译后，程序正常运行；而当使用64位编译后，系统运行dump core。让这位同事奇怪的是他所修改的程序中还有其他模块也使用了同样的基础库函数，为什么偏偏他这块儿出错呢？恰恰该程序的其他模块是我写的。 该程序调用的基础库函数大致是这样的： typedef unsigned long my\_size\_...</description></item><item><title>算法时间复杂性之渐近法分析基础</title><link>https://tonybai.com/2006/05/23/the-base-of-algorithm-complexity-asymptotic-analysis/</link><pubDate>Tue, 23 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/23/the-base-of-algorithm-complexity-asymptotic-analysis/</guid><description>在我的评论栏中有人说：&amp;#34;你是程序员?&amp;#34;，我可以确定、一定以及肯定地告诉他/她：&amp;#39;我就是一个程序员，如假包换&amp;#39;。也许是最近技术类的blog写得少了，其他类的多写了些，让人家误会了，这也无可厚非。不过我倒是想到这样一个问题：程序员一定要满篇地谈技术么，程序员也有自己丰富多彩的生活呀。好了，切入正题。今天我们谈谈算法时间复杂性的分析。我没系统学过，都是在书上看到的以及MIT算法导论课上听到的。这里仅从我...</description></item><item><title>单元测试进行曲</title><link>https://tonybai.com/2006/05/12/the-march-of-unit-test/</link><pubDate>Fri, 12 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/12/the-march-of-unit-test/</guid><description>又是老生常谈-&amp;#39;单元测试&amp;#39;，说实话自己在单元测试上是&amp;#39;语言上的巨人，行动上的矮子&amp;#39;，属于那种说的比做的多的人^\_^。不过也不能说什么也没做。记得去年年末的时候自己还设计并实现过一个简单的&amp;#39;C语言单元测试包&amp;#39;呢^\_^，至今这个包仍然还在使用呢。不过大多数的单元测试都不像想象中那样简单，我们在介绍单元测试的时候，大多拿Add、Sub等作例子，这样当然有好处，简单易懂。其实学习单元测试初期关键是学习...</description></item><item><title>算法描述中的'Pseudocode Conventions'</title><link>https://tonybai.com/2006/05/10/pseudocode-conventions-in-algorithm-description/</link><pubDate>Wed, 10 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/10/pseudocode-conventions-in-algorithm-description/</guid><description>Pseudocode，即伪码，它常常用来描述一个算法，目的是能使被描述的算法能够容易的以任何一种计算机程序语言实现。’Pseudocode Conventions’可以理解为’伪码约定’，既然是’约定’那就并非强制性的标准。但是在专业的有关算法的文献和资料中，其相关内容多符合这些’Pseudocode Conventions’。如果你是一个想学习和钻研算法的人，那么建议你熟悉这些’Conventi...</description></item><item><title>你提供默认选项了吗</title><link>https://tonybai.com/2006/05/08/supply-the-default-option/</link><pubDate>Mon, 08 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/08/supply-the-default-option/</guid><description>五一期间到姥姥家串门儿，自然午饭要在那吃，可中午做饭时听姥姥抱怨新买的电饭煲做饭时间太长而且还夹生，我好奇的走了过去想看看究竟，电饭煲的确是新买不久的，而且是美的的，我心想大牌厂商应该不会有这样的质量问题呀，一定是姥姥使用上的问题。仔细看了看控制板，果然不出所料，电饭煲的’功能选择’键停在了功能档的中央，既不是左边的’煮饭’也不是右边的’煲粥’，遂告诉姥姥以后煮饭要把功能选择调到’煮饭’档。 吃完...</description></item><item><title>Unix Shell Scripting之'扫盲篇'</title><link>https://tonybai.com/2006/05/02/an-introduction-on-unix-shell-scripting/</link><pubDate>Tue, 02 May 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/05/02/an-introduction-on-unix-shell-scripting/</guid><description>俗话说：&amp;#34;工欲善其事，必先利其器&amp;#34;。在Unix/Linux上做开发，这里的’器’也同样包括Unix Shell Script，遗憾亚，虽然自己在Unix上开发已经快2年了，但是对Unix Shell Script可以说是’Script盲’一个，很多稍微复杂些的Script自己根本都看不懂。其实这也是自己栽下的’苦果’，因为以前我一直’歧视’Script language，认为那不是真正程序员该精通...</description></item><item><title>遇到系统的高可用性问题</title><link>https://tonybai.com/2006/04/25/a-problem-about-high-available-service/</link><pubDate>Tue, 25 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/25/a-problem-about-high-available-service/</guid><description>我也是直到最近才接触到&amp;#39;高可用性&amp;#39;这个词儿的，从我所在的项目需求角度出发，我理解&amp;#39;高可用性&amp;#39;就是在系统的外部依赖实体(如主数据库、主网络)等瘫痪了之后，系统仍然能正常的支撑业务的运行，当然系统自己宕掉了，那就没辙了^\_^。高可用性设计实际上就是在系统自身完好的情况下如何考虑其外部实体的设计以保证系统能持续的运行支撑下去，起码从我现在正在做的项目的角度来说是可以这样理解的。 目前我们的系统的高可用...</description></item><item><title>恼人的'素数回文'</title><link>https://tonybai.com/2006/04/16/solve-prime-palindromes/</link><pubDate>Sun, 16 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/16/solve-prime-palindromes/</guid><description>33.00s和14.27s，两个截然不同的运行时间值，两次提交尝试解决素数回文问题，终于搞定了！用两个字形容’恼人’！算法不复杂，就是要求时间很’紧’，大部分工作都在考虑着如何缩短运行时间。桃花在冷空气袭来的日子都开了，我的心也算可以放下了！ 最近项目吃紧，连续两天没有做ACM习题了，手都有些生了^\_^！按照Volume1的习题顺序，该轮到1004题了！这是一道关于’素数回文(Prime Pal...</description></item><item><title>开始'亡羊补牢'</title><link>https://tonybai.com/2006/04/12/begin-fix-before-lost-too-much/</link><pubDate>Wed, 12 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/12/begin-fix-before-lost-too-much/</guid><description>就在昨天，就在我们的项目要结项的时候，一个影响力不亚于’广岛原子弹’的bug出炉了，蒙蔽我近一个月的问题终于被澄清了，不过为时已晚，项目即将上线，如果想彻底地解决这个问题，需要对整个系统的实现架构作调整，目前能做的只是’亡羊补牢’了。 这里先简单的说一下问题的原因吧！熟悉Unix编程的人都知道有’共享内存映射’这回事儿，我们的问题恰巧就出在对’共享内存映射’的使用不当上。由于我们使用的底层库采用的...</description></item><item><title>算法的回归</title><link>https://tonybai.com/2006/04/07/the-return-of-algorithm/</link><pubDate>Fri, 07 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/07/the-return-of-algorithm/</guid><description>关于算法的文章我一直想写，但算法是我的软肋，自己难于下笔。首先自己非科班出身，没有进行过系统的算法设计课程训练；再者自己到目前为止还从未独立设计过一个完整的、实用的算法，在平时工作中较少的涉及到算法设计，这不能说不是一个遗憾。也许有人会问：&amp;#34;算法难道还没有过时吗，算法不是属于&amp;#39;Donald E. Knuth&amp;#39;那一代人的事情吗?&amp;#39;。我很难回答这个问题，不过当我今天看到CSDN上的一篇题为&amp;#39;算法是百度...</description></item><item><title>第一道ACM练习题</title><link>https://tonybai.com/2006/04/05/do-an-acm-exercise/</link><pubDate>Wed, 05 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/05/do-an-acm-exercise/</guid><description>说来惭愧，今天才真正做过一道ACM练习题。自从上个月发现我的母校上有ACM的在线测试站点，我就下决心好好潜心做题，一来提高一下自己解决问题的能力，一方面也想在算法方面多实践实践，而且每天都花一定时间写程序还可以锻炼自己的思维能力。总而言之，由于项目繁忙以至直到今天才开始做第一道ACM练习题，做题的过程’坎坷不平’，让我印象深刻亚!^\_^ 有人会说：’ACM’中的题都是不实用的，没有实际意义。我之...</description></item><item><title>我来'Mixing Milk'</title><link>https://tonybai.com/2006/04/05/solve-mixing-milk/</link><pubDate>Wed, 05 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/05/solve-mixing-milk/</guid><description>这又是一道ACM练习题，我的原则就是如果有时间，坚持每天考虑解决一道吸引我的ACM练习题，今天这道&amp;#39;Mixing Milk&amp;#39;题并不难，不过里面蕴含着一个基础的算法，毕竟对算法一类的知识生疏已久，今天就拿它做一次回顾吧！ 这道&amp;#39;Mixing Milk&amp;#39;(1003)题目前在&amp;#39;在线测试&amp;#39;系统上的状态是474/1207=39.27%(即accepted/submit=ratio)，算是中等偏下难度的题了，...</description></item><item><title>追求'lint-clean'</title><link>https://tonybai.com/2006/03/31/pursue-lint-clean/</link><pubDate>Fri, 31 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/31/pursue-lint-clean/</guid><description>到底需不需要编译器之外的独立的静态代码检查工具呢？这个问题’仁者见仁，智者见智’。但是有一个结论我想大家都会认可，那就是越是在开发周期早期发现的Bug，修复它所付出的代价就越小。而像lint这样的静态代码检查程序恰恰是让Bug在早期阶段’显露原型’的绝佳工具，而追求’lint-clean’\[注1]境界的代码也向来是专家级程序员的嗜好。别忘了在’C专家编程’一书中曾经提到Sun OS的内核一直是保...</description></item><item><title>见识思维导图</title><link>https://tonybai.com/2006/03/29/learn-mindmap/</link><pubDate>Wed, 29 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/29/learn-mindmap/</guid><description>不瞒大家说在未听说思维导图之前，我自己就常常在废旧打印纸背面画那种’枝繁叶茂’的、很发散的需要费力才能将其中的信息串起来的’思考图’(我那时就这么叫它)。我喜欢思考，但却常常因为没有及时把自己思考出来的好想法记录下来而遗憾，因为有些灵感是’来去匆匆’的，你可以在不经意的0.1秒得到这个灵感，可是之后你再花1个小时’冥思苦想’也迸发不出来这样的想法了。现在我的’思考图’有了’大名’了，叫’思维导图’...</description></item><item><title>C语言也重构</title><link>https://tonybai.com/2006/03/28/c-refactoring/</link><pubDate>Tue, 28 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/28/c-refactoring/</guid><description>*所谓的重构是这样的一个过程：在不改变代码外在行为的前提下，对代码做出修改，以改进程序的内部结构。重构是一种有纪律的、经过训练的、有条不紊的程序整理方法，可以将整理过程中不小心引入错误的机率降到最低，本质上说，重构就是\[在代码写好之后改进它的设计]。*– Martin Fowler *重构，一种改善代码’体质’的方法’。* — 侯捷 *重构是上进程序员每天的进行式。是一项工程而不是靠着天份挥洒的...</description></item><item><title>当数组作参数时</title><link>https://tonybai.com/2006/03/27/when-array-passed-as-arguments/</link><pubDate>Mon, 27 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/27/when-array-passed-as-arguments/</guid><description>C语言中的数组和指针总保持着&amp;#39;千丝万缕&amp;#39;的联系，这里仅针对数组作为函数实参时的情况做些说明^\_^。 C语言中的数组可分为一维数组和多维数组两类，而多维数组中又以二维数组最为常见。这里也仅针对这一维数组和二维数组作简要说明。 看过&amp;#39;高质量C++编程指南&amp;#39;的人可能都知道书中有这样一句&amp;#39;注意当数组作为函数的参数进行传递时，该数组自动退化为同类型的指针&amp;#39;，这句话针对一维数组固然是正确的，但是对于多维数组...</description></item><item><title>'right-left'规则再举例</title><link>https://tonybai.com/2006/03/26/another-example-for-c-right-left-rule/</link><pubDate>Sun, 26 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/26/another-example-for-c-right-left-rule/</guid><description>闲暇时翻阅&amp;#39;C专家编程&amp;#39;，再次看到对C语言变量声明的理解一节，遂想起我曾经写过的那篇利用&amp;#39;right-left&amp;#39;规则分析复杂的C语言变量声明的文章&amp;#39;C复杂声明解析&amp;#39;，发现其中的例子的对比性不够强，所以决定再用一篇短文来再阐述。 至于&amp;#39;right-left&amp;#39;规则这里就不再重述了。这里想重点分析一组对比&amp;#39;鲜明&amp;#39;的例子：分析int \*p\[20]和int (\*p)\[20]。 闲话就不多说了，我们看...</description></item><item><title>理解C复杂声明之'优先级规则'</title><link>https://tonybai.com/2006/03/26/understand-priority-rule-for-parse-c-declaration/</link><pubDate>Sun, 26 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/26/understand-priority-rule-for-parse-c-declaration/</guid><description>第一次看《C专家编程》一书时关于其采用的&amp;#39;优先级规则&amp;#39;分析C复杂声明时看得很糊涂，在理解&amp;#39;right-left&amp;#39;规则分析C复杂声明后，再回过头来看&amp;#39;优先级规则&amp;#39;，居然发现它们的异曲同工之妙^\_^。 其实&amp;#39;优先级规则&amp;#39;的分析过程极其类似&amp;#39;right-left&amp;#39;规则，下面首先摘录&amp;#39;优先级规则&amp;#39;的&amp;#39;口诀&amp;#39;，然后再&amp;#39;一招一式&amp;#39;的细致讲解^\_^。 \[优先级规则&amp;#39;口诀&amp;#39;] A 声明从它的名字开始读取，然...</description></item><item><title>如果让我面试C程序员，我会问</title><link>https://tonybai.com/2006/03/26/interview-questions-for-c-programmer/</link><pubDate>Sun, 26 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/26/interview-questions-for-c-programmer/</guid><description>我有这样的一个习惯，就是看书的时候总是喜欢自问自答，这不周末第二次温习’C专家编程’一书，便有了如下若干问题，明为提问，实则是在提醒自己好好想想这些问题，如果大家有兴趣，也可以给出你自己的答案，如果觉得琢磨不透，可翻看’C专家编程’一书，或多敲几次键盘，自己试上一把！ 1、你认为C语言\[注1]是一门成功的语言吗？如果认为是，那么你认为它成功的关键在什么地方？或者说它的魅力所在？ 2、C语言中的函...</description></item><item><title>GCC警告选项例解</title><link>https://tonybai.com/2006/03/14/explain-gcc-warning-options-by-examples/</link><pubDate>Tue, 14 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/14/explain-gcc-warning-options-by-examples/</guid><description>程序员是追求完美的一族，即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一点点的瑕疵。遇到任意一条编译器警告都坚决不放过。有人会说：我们可以使用比编译器更加严格的静态代码检查工具，如splint。这个建议也很不错。不过lint工具使用起来较繁琐，有时候还需要记住一些特定符号并插入到你自己的代码中才行，门槛较高，这也让很多人止步于此。那么我们就从此放弃么？不，如今的编译器做得都很好，它可以帮...</description></item><item><title>Kernel 'head.S'</title><link>https://tonybai.com/2006/03/02/kernel-head/</link><pubDate>Thu, 02 Mar 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/03/02/kernel-head/</guid><description>After being decompressed, the kernel image starts with another ‘startup\_32′ function included in $(linux-2.6.15.3\_dir/arch/i386/kernel/head.S’. This ‘head.S’ is the second one in linux source packag...</description></item><item><title>Compressed 'head.S'</title><link>https://tonybai.com/2006/02/25/compressed-head/</link><pubDate>Sat, 25 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/25/compressed-head/</guid><description>_Why do we do this? Don’t ask me.. Incomprehensible are the ways of bootloaders. _                             — comments in arch/i386/boot/compressed/misc.c There are two ‘head.S’ in linux source pac...</description></item><item><title>Transfer to '32-bit'</title><link>https://tonybai.com/2006/02/17/transfer-to-32bit/</link><pubDate>Fri, 17 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/17/transfer-to-32bit/</guid><description>The phase we talked about before is in ‘Real-address Mode’, which runs 16-bit program modules. At the tail of &amp;#34;Begin ‘setup.S’&amp;#34;, we had moved to ‘Protected Mode’, which usu runs 32-bit program modules...</description></item><item><title>Outline 'memory layout'</title><link>https://tonybai.com/2006/02/15/outline-memory-layout/</link><pubDate>Wed, 15 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/15/outline-memory-layout/</guid><description>So far we have arrived at the gate leading to the real kernel. And we’d better stop for a short break in order that we would have more energy to go ahead. Now let’s examine what we do to memory these ...</description></item><item><title>Begin 'setup.S'</title><link>https://tonybai.com/2006/02/13/begin-setup/</link><pubDate>Mon, 13 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/13/begin-setup/</guid><description>It is time for ‘setup.S’ to show its power. The ‘setup.S’ is loaded by the bootloader and virtually it belongs to neither the ‘bootstrap’ routine nor the kernel program, although it is a portion of th...</description></item><item><title>Goto 'Bootstrap'</title><link>https://tonybai.com/2006/02/11/goto-bootstrap/</link><pubDate>Sat, 11 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/11/goto-bootstrap/</guid><description>The term ‘Bootstrap’, which originally refers to a person who tries to stand up by pulling his own boots, refers to a subroutine used to establish the full routine(its own left part, i think) or anoth...</description></item><item><title>Inside the 'i386'</title><link>https://tonybai.com/2006/02/09/inside-the-i386/</link><pubDate>Thu, 09 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/09/inside-the-i386/</guid><description>The term ‘i386′ in the title does not refer to the real Intel 80386 processor but the representative of Intel 32-bit architecture(IA32). I prefer ‘i386′ rather than ‘IA32′ just like what the linux ker...</description></item><item><title>Retired 'bootsect.S'</title><link>https://tonybai.com/2006/02/08/retired-bootsect/</link><pubDate>Wed, 08 Feb 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/02/08/retired-bootsect/</guid><description>We know that the latest linux kernel version is 2.6.x, which is different from the ‘old kernels’ in booting. The ‘bootsect.S’, which used to make the kernel image in the floppy disk bootable in the ea...</description></item><item><title>收到Ubuntu光盘</title><link>https://tonybai.com/2006/01/23/got-the-ubuntu-disc/</link><pubDate>Mon, 23 Jan 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/01/23/got-the-ubuntu-disc/</guid><description>一个月以前在Ubuntu上订购了Ubuntu Linux 5.10发行版，今天终于拿到手了^\_^。 在Linux发行版世界，大家最熟悉的几种发行版包括RedHat(或其开源版Fedora)、Debian、SuSE等，提到Ubuntu这个奇怪的名字大家都会感到陌生，在一个多月前我也不例外。Ubuntu是一个基于Debian的Linux操作系统发行版，它完全免费，这次我收到的Ubuntu光盘就是在其...</description></item><item><title>用GDB调试多进程程序</title><link>https://tonybai.com/2006/01/08/debug-multiple-process-program-using-gdb/</link><pubDate>Sun, 08 Jan 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/01/08/debug-multiple-process-program-using-gdb/</guid><description>有一段时间没有写技术方面的东西了^\_^。众所周知，GDB是Unix/Linux下调试程序的龙头老大，GDB功能强大，我们在平时多使用其一些最基本的功能，而且一般调试的都是单进程的程序。最近一个项目中的问题让我接触如何使用GDB调试多进程程序，更确切的是说调试调用fork的多进程程序。 使用GDB最好的文档就是其名为&amp;#39;Debugging with GDB&amp;#39;的参考手册。手册中有一小章节提到了如何调试...</description></item><item><title>Hacker Culture摘要</title><link>https://tonybai.com/2006/01/05/hacker-culture-summary/</link><pubDate>Thu, 05 Jan 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/01/05/hacker-culture-summary/</guid><description>最近看了Eric S. Raymond的被称为开源文化圣典的&amp;#39;Cathedral and Bazaar&amp;#39;(大教堂与市集)以及他的另外一篇文章&amp;#39;How To Become A Hacker&amp;#39;，必须承认的是我不能够完全理解其中的内容，因为没有体验，或者说我还不够资格对Hacker Culture高谈阔论，所以这里仅作部分摘要，并说说自己第一时间的感受，望日后能温故知新。 在开始了解Hacker Cul...</description></item><item><title>在Linux上工作</title><link>https://tonybai.com/2005/12/15/working-on-linux/</link><pubDate>Thu, 15 Dec 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/12/15/working-on-linux/</guid><description>在Linux上学习Linux内核我想应该是最好的方法了。Linux对我来说绝对是一个新鲜环境，搭建在Linux上的工作环境就是我的首要工作，这篇blog记录的就是我在Linux上的工作环境，也希望对大家有些借鉴意义。 我的Linux是在一个多月以前安装的\[注1]，安装的版本是Fedora Core 4。我使用的是本地磁盘映像安装，磁盘映像文件很大，总共4个，大约2.4G体积。安装过程倒是没有像网...</description></item><item><title>APR源代码分析-线程同步篇</title><link>https://tonybai.com/2005/12/11/apr-thread-synchronization/</link><pubDate>Sun, 11 Dec 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/12/11/apr-thread-synchronization/</guid><description>在线程同步方面，Posix标准定义了3种同步模型，分别为互斥量、条件变量和读写锁。APR也“浅”封装了这3种模型，只是在“读写锁”一块儿还没有全部完成。 线程同步的源代码的位置在$(APR\_HOME)/locks目录下，本篇blog着重分析unix子目录下的thread\_mutex.c、thread\_rwlock.c和thread\_cond.c文件的内容，其相应头文件为(APR\_HOME...</description></item><item><title>APR分析-线程篇</title><link>https://tonybai.com/2005/12/08/apr-thread/</link><pubDate>Thu, 08 Dec 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/12/08/apr-thread/</guid><description>并行一直是程序设计领域的难点，而线程是并行的一种重要的手段，而且线程的一些特性也能在进程并行时发挥很好的作用(在“线程同步篇”中详细阐述)。 APR线程的源代码的位置在$(APR\_HOME)/threadproc目录下，本篇blog着重分析unix子目录下的thread.c文件内容，其相应头文件为$(APR\_HOME)/include/apr\_threadproc.h。 一、线程基础 《深入...</description></item><item><title>APR源代码分析-网络IO篇</title><link>https://tonybai.com/2005/12/05/apr-network-io/</link><pubDate>Mon, 05 Dec 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/12/05/apr-network-io/</guid><description>“这个世界如果没有了网络就好比没有了石油、没有了电一样，是多么的可怕呀。”相信世界上已经有很多很多的人能够同意这种观点了，通过这个观点也可以看出网络在现代人们心中的地位。而运行在网络节点上的网络应用程序则是在幕后默默地为人们提供着服务。Apache Server就是其中一个典型的代表。而APR网络I/O库则像磐石一样支撑着Apache Server的运行。 APR网络I/O的源代码的位置在$(AP...</description></item><item><title>APR源代码分析-进程同步篇</title><link>https://tonybai.com/2005/12/02/apr-process-synchronization/</link><pubDate>Fri, 02 Dec 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/12/02/apr-process-synchronization/</guid><description>最新的统计数据显示Apache服务器在全世界仍然占据着Web服务器龙头老大的位置，而且市场占有率遥遥领先，所以学习Apache相关知识是完全正确的方向，这里我们继续分析APR进程同步相关内容。 进程同步的源代码的位置在$(APR\_HOME)/locks目录下，本篇blog着重分析unix子目录下的proc\_mutex.c、global\_mutex文件内容，其相应头文件为$(APR\_HOME...</description></item><item><title>学习虚存-自上而下</title><link>https://tonybai.com/2005/11/30/learn-virtual-mem-f/</link><pubDate>Wed, 30 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/30/learn-virtual-mem-f/</guid><description>如果它不存在，但是你能看见它 — 它是虚拟的(IBM宣传虚拟内存之用语)。虚拟内存技术是计算机发展史上的一项重要的技术，它帮助应用程序摆脱了“体积”的限制。 记得上大学时，有一本书好像叫做“计算机网络 – 自顶向下”，全名记不太清了。书中从人们接触最多也最熟悉的“应用层”开始讲，一直讲到“物理层”，看完这本书后感觉效果不错。所以按照这种方法我也尝试着自上而下的去学习“虚存”，从我们最熟悉的C库接口...</description></item><item><title>汇编之路-复习栈操作</title><link>https://tonybai.com/2005/11/24/assembly-series-review-stack-operation/</link><pubDate>Thu, 24 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/24/assembly-series-review-stack-operation/</guid><description>不得不承认上次关于栈桢和栈操作写得有些笼统，这里做一次“补充”，美名其曰：“复习”。 下面的这个例子几乎就能覆盖所有的栈操作相关的内容了。 void dummy() {         int     i = 12;         int     j = 13;         char    c = &amp;#39;a&amp;#39;; } int main() {         dummy();         re...</description></item><item><title>软件抽象</title><link>https://tonybai.com/2005/11/21/software-abstraction/</link><pubDate>Mon, 21 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/21/software-abstraction/</guid><description>不知道“软件抽象”这个标题能否恰好表达出我想表达出的意思，暂且就起这个名字吧。随着工作经验的增加，对软件开发所涉及的技术知识体系的理解也渐渐地清晰（起码自己是这么感觉的^\_^），思考了若干时间后，拿出来给自己一个和大家交流的机会。 1、起源 这个想法起源于一次项目方案讨论例会，会上我们的项目遇到了“存储资源瓶颈”，遂有同事提出一个类似“数据中心”的方案，但考虑到部门目前没有相关经验和数据供参考，...</description></item><item><title>tony说设计-实践后的体会</title><link>https://tonybai.com/2005/11/16/experience-after-some-design-practice/</link><pubDate>Wed, 16 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/16/experience-after-some-design-practice/</guid><description>入司后连续做过几个项目。最近在做一个新的项目的设计的时候，突然想到是不是该把以前项目中一些好的设计想法应用到新的项目中，并且尽量减少在新的项目中遗留以前的不好的设计呢？那么以前的项目中哪些是值得我去借鉴，哪些又是应该去避免的呢？真的很遗憾，自己并没有系统的反思和总结过，这就是我写下这篇Blog的直接起因。 一直在Unix平台下做设计和开发，所以下面谈的内容可能都有些局限性。作为设计原则本身，某些可...</description></item><item><title>汇编之路-栈操作与栈帧</title><link>https://tonybai.com/2005/11/13/assembly-series-stack-oper-and-frame/</link><pubDate>Sun, 13 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/13/assembly-series-stack-oper-and-frame/</guid><description>结构化程序的一个最基本的单元就是“函数”或者叫“过程”。在汇编这一层自然也相应的有支持这些概念的指令操作，如栈操作和栈帧的概念。 首先这里要为“打开汇编之门”那篇blog补充一点的是：汇编语言是与机器相关，这里的一切都是基于IA-32机器平台的。 1、寻址方式 我们已经知道在操作数表示中有一种是用来指示内存地址的内容的，在GNU Assembly中指示内存地址有多种方式，这些方式被统称“寻址方式”...</description></item><item><title>打开汇编之门</title><link>https://tonybai.com/2005/11/12/open-the-gate-to-assembly-language/</link><pubDate>Sat, 12 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/12/open-the-gate-to-assembly-language/</guid><description>工作这么长时间，一直在C语言这一层面上钻研和打拼，日积月累，很多关于C的疑惑在书本和资料中都难以找到答案。程序员是追求完美的一个种群，其头脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁。不久前在itput论坛上偶得《Computer Systems A Programmer&amp;#39;s Perspective》（以下称CSAPP）这本经典好书，遂连夜拜读以求解惑。虽说书中没有能正面的回答我的一些疑惑，但是...</description></item><item><title>C单元测试包设计与实现</title><link>https://tonybai.com/2005/11/08/the-design-and-implementation-of-c-unittest-framework/</link><pubDate>Tue, 08 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/08/the-design-and-implementation-of-c-unittest-framework/</guid><description>在Java、C++和C#等高级语言的单元测试正进行的如火如荼的时候，C好像做了看客，冷清的躲在了一个不起眼的角落里。C并不是没有单元测试工具，像Check和CUnit这样的工具也很有名气，只是和大名鼎鼎的JUnit比起来，还是显得有些英雄气短。很多大型的C项目，如APR等都没有使用像Check、CUnit这样通用的单元测试框架，而是另起炉灶自己编写。其实编写一个仅能满足单个项目需要的C单元测试工具...</description></item><item><title>APR源代码分析-环篇</title><link>https://tonybai.com/2005/11/03/apr-ring/</link><pubDate>Thu, 03 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/03/apr-ring/</guid><description>APR中少见对数据结构的封装，好像唯一例外的就是其对循环链表，即环(RING)的封装。 在大学的时候学的不是计算机专业，但大三的时候我所学的专业曾开过一门好像叫“计算机软件开发基础”的课，使用的是清华的一本教材，课程的内容包括数据结构。说实话听过几节课，那个老师讲的还不错，只是由于课程目标所限，没讲那么深罢了。当然我接触数据结构要早于这门课的开课时间。早在大一下学期就开始到计算机专业旁听“数据结构...</description></item><item><title>再说内存</title><link>https://tonybai.com/2005/11/02/talk-about-memory-again/</link><pubDate>Wed, 02 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/02/talk-about-memory-again/</guid><description>离我的上一篇BLOG已经时隔一个月有余，项目忙是一方面原因，最主要的还是自己没什么“收获”。在最近的项目中总是和内存打交道，时间长了，便有了些许问题，原本我就不是不求甚解者，遂趁此机会又复习了些内存相关资料。 其实下面的话题都是源于在实际项目中碰到的问题，我们通过推敲一句话来开始吧! 1、推敲一句话 在《C专家编程》一书中，有这样的说法“Malloced memory is always alig...</description></item><item><title>也谈字节序问题</title><link>https://tonybai.com/2005/09/28/also-talk-about-byte-order/</link><pubDate>Wed, 28 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/28/also-talk-about-byte-order/</guid><description>一次Sun SPARC到Intel X86的平台移植让我们的程序遭遇了“字节序问题”，既然遇到了也就不妨深入的学习一下。 一、字节序定义 字节序，顾名思义字节的顺序，再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。 其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。 在所有的介绍字节序的...</description></item><item><title>APR源代码分析-共享内存篇</title><link>https://tonybai.com/2005/09/23/apr-shmem/</link><pubDate>Fri, 23 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/23/apr-shmem/</guid><description>共享内存是一种重要的IPC方式。在项目中多次用到共享内存，只是用而并未深入研究。这次趁研究APR代码的机会复习了共享内存的相关资料。 APR共享内存封装的源代码的位置在$(APR\_HOME)/shmem目录下，本篇blog着重分析unix子目录下的shm.c文件内容，其相应头文件为$(APR\_HOME)/include/apr\_shm.h。 一、共享内存简单小结 共享内存是最快的IPC方式，...</description></item><item><title>解疑sigsuspend</title><link>https://tonybai.com/2005/09/22/understand-sigsuspend/</link><pubDate>Thu, 22 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/22/understand-sigsuspend/</guid><description>Unix提供了等待信号的系统调用，sigsuspend就是其中一个，在CU(www.chinaunix.net)上曾经讨论过一个关于该系统调用的问题，这里也做一下解疑。 CU网友讨论的问题的核心就是到底sigsuspend先返回还是signal handler先返回。这个问题Stevens在《Unix环境高级编程》一书中是如是回答的“If a signal is caught and if the...</description></item><item><title>理解Zombie和Daemon Process</title><link>https://tonybai.com/2005/09/21/understand-zombie-and-daemon-process/</link><pubDate>Wed, 21 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/21/understand-zombie-and-daemon-process/</guid><description>潜水于CU(www.chinaunix.net)，看到了大家对Zombie Process和Daemon Process的理解，同样也意识到以前自己对这两个概念理解的偏颇，想在这篇Blog中将之纠正。 一、Zombie Process Zombie Process，译成中文为僵尸进程，以前我一直认为父进程先结束，子进程就变成了僵尸进程，事实上这与正确的理解恰恰相反，真惭愧，只是从字面理解了而并未深...</description></item><item><title>理解dup和dup2</title><link>https://tonybai.com/2005/09/19/understand-dup-and-dup2/</link><pubDate>Mon, 19 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/19/understand-dup-and-dup2/</guid><description>看到ChinaUnix(CU)上的一个帖子后，觉得自己对dup和dup2特别是后者的理解还是有欠缺的，这两个接口看起来很简单，但是理解起来也真的并不是那么容易。 相信大部分在Unix/Linux下编程的程序员手头上都有《Unix环境高级编程》(APUE)这本超级经典巨著。作者在该书中讲解dup/dup2之前曾经讲过“文件共享”，这对理解dup/dup2还是很有帮助的。这里做简单摘录以备在后面的分析...</description></item><item><title>APR源代码分析-高级IO篇</title><link>https://tonybai.com/2005/09/17/apr-advanced-io/</link><pubDate>Sat, 17 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/17/apr-advanced-io/</guid><description>近两天稍轻闲了些，便抓紧时间学习、学习再学习。在“APR分析-文件IO篇”，我们只分析了最基本的I/O操作，如文件的open、close、write和read。当然File I/O操作不止这些，在这一篇中我们来看看APR提供的一些高级I/O设施，包括记录锁、I/O多路复用和内存映射文件(内存映射文件将和共享内存一起分析)。 一、记录锁或(区域锁)\[注1] 我见过的对记录锁讲解最详细的书就是《Un...</description></item><item><title>APR源代码分析-文件IO篇</title><link>https://tonybai.com/2005/09/15/apr-file-io/</link><pubDate>Thu, 15 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/15/apr-file-io/</guid><description>文件I/O在Unix下占据着非常重要的地位，曾有一句经典语句绝对可以说明file在Unix下的重要性，That is &amp;#34;In UNIX, everything is a file&amp;#34;，APR就是本着这个思想对Unix文件I/O进行了再一次的抽象封装，以提供更为强大和友善的文件I/O接口。 APR File I/O源代码的位置在$(APR\_HOME)/file\_io目录下，本篇blog着重分析un...</description></item><item><title>APR源代码分析-信号篇</title><link>https://tonybai.com/2005/09/13/apr-signal/</link><pubDate>Tue, 13 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/13/apr-signal/</guid><description>U know 信号是Unix的重要系统机制。信号机制使用起来很简单，但是理解起来有并不是那么Easy。APR Signal的封装也并不繁琐，代码量很少，所以分析APR Signal的过程其实就是学习Signal机制的过程。 一、信号介绍 1、Signal“历史久远”，在最初的Unix系统上就能看到它“伟岸”的身影。它的引入用来进行User Mode进程间的交互，系统内核也可以利用它通知User M...</description></item><item><title>理解ASCII码</title><link>https://tonybai.com/2005/09/11/learn-ascii/</link><pubDate>Sun, 11 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/11/learn-ascii/</guid><description>最近在写一个串口程序，设备提供商的通讯协议说明中明确了内部通讯方式为“ASCII码”。其实每个和计算机打交道的人都会天天接触ASCII码，只是ASCII码藏在了幕后，我们很少与之正面打交道罢了，这次机会正好让我有机会到幕后去看看ASCII码的“庐山真面目”。 ASCII码众所周知全称为“美国信息交换标准码，American Standard Code for Information Interch...</description></item><item><title>APR源代码分析-内存篇</title><link>https://tonybai.com/2005/09/07/apr-memory-management/</link><pubDate>Wed, 07 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/07/apr-memory-management/</guid><description>内存管理一直是让C程序员头痛的问题，作为一个通用接口集，APR当然也提供其自己的内存管理接口–APR Pool。APR Pool作为整个APR的一个基础功能接口，直接影响着APR的设计风格。在这篇Blog中，我们就要和APR Pool来一次“亲密接触”。(还是以Unix平台实现为例) APR Pool源代码的位置在$(APR\_HOME)/memory目录下，本篇blog着重分析unix子目录下的...</description></item><item><title>APR源代码分析-进程篇</title><link>https://tonybai.com/2005/09/01/apr-process-management/</link><pubDate>Thu, 01 Sep 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/09/01/apr-process-management/</guid><description>Apache Server的进程调度一直为人所称道，Apache 2.0推出的APR对进程进行了封装，特别是Apache 2.0的MPM(Multiple Process Management)框架就是以APR封装的进程为基础的，下面就让我们一起来探索一下APR的进程封装吧(以Unix平台为例)。 APR进程封装源代码的位置在$(APR\_HOME)/threadproc目录下，本篇blog着重分...</description></item><item><title>APR源代码分析-设计篇</title><link>https://tonybai.com/2005/08/30/apr-design/</link><pubDate>Tue, 30 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/30/apr-design/</guid><description>作为一个可移植的运行时环境，APR的设计当然是很精妙的，但精妙的同时对使用者有一些限制。 APR附带一个简短的设计文档，文字言简意赅，其中很多的设计思想都值得我们所借鉴，主要从三个方面谈。 1、类型 1\) APR提供并建议用户使用APR自定义的数据类型，好处很多，比如便于代码移植，避免数据间进行不必要的类型转换（如果你不使用APR自定义的数据类型，你在使用某些APR提供的接口时，就需要进行一些参...</description></item><item><title>APR源代码分析-整体篇</title><link>https://tonybai.com/2005/08/25/apr-introduction/</link><pubDate>Thu, 25 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/25/apr-introduction/</guid><description>由于部门所使用的底层库与Apache Server有着“一定的渊源”，所以总有一种想看看Apache的实现的冲动。最近项目收尾，愿望终可实现。 一、何为APR? Apache Server经过这么多年的发展后，将一些通用的运行时接口封装起来提供给大家，这就是Apache Portable Run-time libraries, APR。 二、APR的目录组织 从www.apache.org上下载a...</description></item><item><title>走马观花ANSI C标准-类型表示</title><link>https://tonybai.com/2005/08/19/c-standard-overview-type-representation/</link><pubDate>Fri, 19 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/19/c-standard-overview-type-representation/</guid><description>类型表示(representation of types) 1、一般规则 a) 除了位域(bit field)之外的对象都是由一个或多个相邻序列字节组成的，这些字节的个数(number)、次序(order)和编码方式或是显式说明的，或是实现定义的。 b) 存储在非符号位域(unsigned bit field)和unsigned char类型对象中的值应该用纯二进制表示(pure binary n...</description></item><item><title>分析“参数传递”</title><link>https://tonybai.com/2005/08/12/analysis-on-args-passing/</link><pubDate>Fri, 12 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/12/analysis-on-args-passing/</guid><description>翻看以前的一次jjhou的“高阶C”课程的ppt，突然想到今天指导新员工时，她犯的关于参数传递方面的错误，就想简单分析一下。 一、现象和经验 规则：任何时候你想在函数内修改某个外面的变量值，并影响Caller，你应该传递该变量的地址进去。如果是指针变量，也不例外。 a) 反例1 void test(int a) {  a = a + 10; } int main() {  int cnt = 0;...</description></item><item><title>C复杂声明解析</title><link>https://tonybai.com/2005/08/09/an-explanation-of-complex-c-declaration/</link><pubDate>Tue, 09 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/09/an-explanation-of-complex-c-declaration/</guid><description>部门最近在进行C培训，由于有一个新员工需要我来指导，所以看了一下培训用的ppt，了解一下新员工的学习进度，恰看到ppt中有关“如何读懂复杂C声明”的章节。遂想起来自己在看《C专家编程》时，这块儿看得并不是很深刻，万一新员工问到我这块儿…，我不能打没有准备之仗，遂恶补之。 复杂的C声明一般被认为不是很好的编程习惯，当然也就不推荐使用。但是在读很多前辈遗留的代码时，又不得不面对这一问题。知道总比不知道...</description></item><item><title>也谈内存对齐</title><link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/</link><pubDate>Tue, 09 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/</guid><description>在最近的项目中，我们涉及到了“内存对齐”技术。对于大部分程序员来说，“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活，太强大，它允许你干预“内存对齐”。如果你想了解更加底层的秘密，“内存对齐”对你就不应该再透明了。 一、内存对齐的原因 大部分的参考资料都是如是说的： 1、平台原因(移...</description></item><item><title>走马观花ANSI C标准-类型</title><link>https://tonybai.com/2005/08/06/c-standard-overview-type/</link><pubDate>Sat, 06 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/06/c-standard-overview-type/</guid><description>类型(type) 1、类型分为：    a) object type — types that fully describe objects    b) function type — types that describe functions    c) uncomplete type — types that describe objects but lack information need...</description></item><item><title>走马观花ANSI C标准-标识符</title><link>https://tonybai.com/2005/08/05/c-standard-overview-identifier/</link><pubDate>Fri, 05 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/05/c-standard-overview-identifier/</guid><description>标识符(identifier) 1、一个标识符可以表示: a) 对象(object) b) 函数(function) c) 结构体(struct)的标签(Tag)\[注1] d) 结构体的成员 e) 联合体(union)或枚举类型(enumeration) f) 类型别名(typedef) g) 标签(label) h) 宏(macro) i) 宏参数(macro parameter) 同一个标识...</description></item><item><title>走马观花ANSI C标准-环境</title><link>https://tonybai.com/2005/08/04/c-standard-overview-envi/</link><pubDate>Thu, 04 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/04/c-standard-overview-envi/</guid><description>标准都是条条框框的，以严谨著称，语言晦涩难懂。这也是大多数人不愿意“接近”它的原因。但它吸引我的最重要原因恰恰是“标准”二字，我觉得我能从这个标准中找到一些“闪光点”，而这些“闪光点”又恰恰是能让我有所提高的地方。 1、翻译环境 C Source文件是以文本形式存在的，将之转变成可执行程序的过程，我们管之叫“翻译”。C语言的翻译不是一蹴而就的，一般需要两遍才能达到目的，第一遍称为“预处理”，预处理...</description></item><item><title>走马观花ANSI C标准-介绍</title><link>https://tonybai.com/2005/07/28/introduction-on-c-standard-overview-series/</link><pubDate>Thu, 28 Jul 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/07/28/introduction-on-c-standard-overview-series/</guid><description>大部分的关于C的著作都提到ANSI C Standard，但我相信少有C程序员真正细致阅读过ANSI C标准(当然了对于作C编译器的程序员来说这个标准肯定是烂熟于胸了^\_^),在这个系列的文章中我将和大家一起浏览一下ANSI C标准(C99，以下称标准)，呵呵，当然也不能面面俱到，只是“走马观花”。 1\. 什么是“标准”（这里指编程语言标准） 按照comp.lang.c的C FAQ的意思:“标...</description></item><item><title>C程序员之“痛”</title><link>https://tonybai.com/2005/07/20/pain-of-c-programmer/</link><pubDate>Wed, 20 Jul 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/07/20/pain-of-c-programmer/</guid><description>内存问题是C程序员永久的话题，也是最能让C程序员心痛的话题。内存bug即隐秘，危害又大，而且往往当你解决了它之后，你会发现你的错误是多么的低级。以我为例，看下面的两个case: CASE1 背景: 配置信息读取 Bug现象: 通过打印语句观察到，在配置读取中间时刻，某一指针突然被置为NULL，出core。 耗时: 6小时 问题所在及分析: 经过6小时的不懈努力，终于发现了这一让我哭笑不得的低级错误...</description></item><item><title>同步问题讨论-Tony与Alex的对话系列</title><link>https://tonybai.com/2005/06/09/tony-alex-dialog-on-synchronization/</link><pubDate>Thu, 09 Jun 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/06/09/tony-alex-dialog-on-synchronization/</guid><description>Alex正在电脑前面作冥思苦想状，这时Tony悄悄地走到Alex的身后，观察了一会儿… Tony : 看来今天我们要讨论同步问题了。 Alex : （惊奇地回头）。Hey Man , you scared me! 你说的没错，我正在学习同步这一块儿呢，有什么高见不妨说出来吧，我洗耳恭听！ Tony : 不敢不敢。关于进程和线程同步的问题，W. Richard Stevens在他的那本经典的“UNI...</description></item><item><title>从技术到管理的对话-Tony与Alex的对话系列</title><link>https://tonybai.com/2005/06/05/tony-alex-dialog-on-from-tech-to-management/</link><pubDate>Sun, 05 Jun 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/06/05/tony-alex-dialog-on-from-tech-to-management/</guid><description>5月末我参加了一次“从技术到管理的”培训，总体来说还是有所收获的。这段时间我一直想把自己的收获总结出来与大家分享，但是也一直没找到一个很好的形式来表达，我想简单的罗列一些规则和技巧是最最乏味的。在我的“关于Tony与Alex的对话系列的一点说明”一文中曾经将“Tony与Alex对话系列”定位为技术类的系列文章，但是经过这几天的思考，发现它同样可以用做管理知识起码是技术管理知识的介绍，这篇Blog将...</description></item><item><title>CppUnit入门实践-Tony与Alex的对话系列</title><link>https://tonybai.com/2005/05/30/tony-alex-dialog-on-cppunit-introduction/</link><pubDate>Mon, 30 May 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/05/30/tony-alex-dialog-on-cppunit-introduction/</guid><description>Tony : Hi Alex ! you just looks like drowing in your project. what is up? Alex : 我们的项目要求引入单元测试，but i&amp;#39;ve no experience in unit test. Tony : i think cppunit is your best choice. Alex : 是的，我刚从网上把它down了下来...</description></item><item><title>一个C++项目的Makefile编写-Tony与Alex的对话系列</title><link>https://tonybai.com/2005/05/23/tony-alex-dialog-on-write-makefile-for-cpp-project/</link><pubDate>Mon, 23 May 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/05/23/tony-alex-dialog-on-write-makefile-for-cpp-project/</guid><description>Tony : Hey Alex, How are you doing? Alex : 不怎么样。(显得很消沉的样子) Tony : Oh , Really ? What is the matter? Alex : 事情是这样的。最近有一个Unix下的C++项目要求我独自完成，以前都是跟着别人做，现在让自己独立完成，还真是不知道该怎么办，就连一个最简单的项目的Makefile都搞不定。昨晚看了一晚上...</description></item><item><title>一个Xml Parser的TDD开发过程-Tony与Alex的对话系列</title><link>https://tonybai.com/2005/04/30/tony-alex-dialog-on-implement-xmlparser-using-tdd/</link><pubDate>Sat, 30 Apr 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/04/30/tony-alex-dialog-on-implement-xmlparser-using-tdd/</guid><description>Tony : Alex今天我们来做一个xml parser.我们使用的开发工具为Eclipse + JUnit Alex : 好啊，喜欢接受挑战。 Tony : 先看看我们要解析的xml file的样子:                     使用XmlSpy自动生成其DTD如下： &amp;amp;lt;!ATTLIST test   name CDATA #REQUIRED &amp;amp;gt; &amp;amp;lt;!ATTLIS...</description></item><item><title>看完“程序员”2005-04期一些想法</title><link>https://tonybai.com/2005/04/20/thoughts-after-reading-programmer-magazine-200504/</link><pubDate>Wed, 20 Apr 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/04/20/thoughts-after-reading-programmer-magazine-200504/</guid><description>每次看完《程序员》杂志都会有些新的收获，这次看的是《程序员》2005年第4期，顺便把一些阅读过程中产生的想法记录了下来。 \[软件建模，大势所趋] 看完微软、IBM、Borland等公司的最新动态，感觉软件建模是大势所趋，以前虽然也有众多建模工具，但是由工具支持得不好，建模的各个阶段彼此脱节，使用户体验(user experience)很差。随着Microsoft VSTS(Visual Stud...</description></item><item><title>微软又推出新语言了</title><link>https://tonybai.com/2005/04/15/microsoft-publish-new-language/</link><pubDate>Fri, 15 Apr 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/04/15/microsoft-publish-new-language/</guid><description>微软又推出新语言了！最近在csdn上围绕着C-Omega和G#的话题有很多。每当我们看到一门新语言诞生时，特别是诞生在微软这样的软件帝国中，很多人都会冒出一身冷汗并大喊“Oh,My God! How fast the technology is going, I can not catch it up!” after that they still have to learn these new ...</description></item><item><title>动态代理再思考</title><link>https://tonybai.com/2005/03/25/thoughts-on-dynamic-proxy/</link><pubDate>Fri, 25 Mar 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/03/25/thoughts-on-dynamic-proxy/</guid><description>看了透明发表在《程序员》杂志2005年第一期上的“动态代理的前世今生”，让我不仅了解了“动态代理”这门技术，更让我知道了一段Java技术的发展史。带着对Rickard Oberg的钦佩之情，怀着对Rod Johnson敬仰之义我踏上了动态代理再思考之路。 **\[****关键词\]** 代理(proxy) 基础设施(infrastructure) 业务组件(business component) ...</description></item><item><title>Boost_1_32_0版源代码编译</title><link>https://tonybai.com/2005/01/28/build-boost-1-32-0/</link><pubDate>Fri, 28 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/28/build-boost-1-32-0/</guid><description>著名的C++准标准库boost在2004年末发布了1.32.0版本，作为C++的忠实Fans怎能“袖手旁观”，趁闲暇时download it and build it。\[注\]：由于没有公司Unix服务器的管理员权限，所以只能在自己的Windows平台上编译了。 1、前提 a) 下载Boost\_1\_32\_0源码包(http://sourceforge.net/project/showfil...</description></item><item><title>关注，AOP</title><link>https://tonybai.com/2005/01/28/focus-aop/</link><pubDate>Fri, 28 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/28/focus-aop/</guid><description>AOP的核心概念是关注点，我开始关注AOP。 一、Why AOP? a) AOP一般观点 一般在开发系统时，我们可以大致的把系统的需求分类为核心模块级需求和系统级需求。很多系统级需求一般来说是相互独立的，但它们一般都会横切许多核心级模块。以一个电信领域的短信网关系统为例，系统的核心级需求是短信的收发，话单处理等，而其系统级的需求包括日志，校验以及性能问题等。像日志这种系统级的需求就横切短信收发、话...</description></item><item><title>Hello，AOP</title><link>https://tonybai.com/2005/01/22/hello-aop/</link><pubDate>Sat, 22 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/22/hello-aop/</guid><description>论坛上有人评价Java在过去的2004有两大值得称赞的技术发展，一个是Java在IOC模式上的成熟应用，再就是Java的AOP框架。 一、好消息 2005年一月份传来好消息，AspectJ与AspectWerkz合力打造AOP框架，两个开发团队将合力开发一个全新的面向方面编程（Aspect-Oriented Programming，AOP）平台，在其中融合双方的长处和经验。这两家都是业界重要的开源...</description></item><item><title>Build ArgoUML and AndroMDA</title><link>https://tonybai.com/2005/01/19/build-argouml-and-andromda/</link><pubDate>Wed, 19 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/19/build-argouml-and-andromda/</guid><description>由于Dominoo近期策略的改变，所以我开始关注和研究UML和MDA领域较为出名的开源项目。我准备先拿ArgoUML和AndroMDA“开刀”。 \* ArgoUML 简介：ArgoUML is a modelling tool that helps you do your design using UML and it is the winner of 13th annual productiv...</description></item><item><title>Dominoo项目日记(四)</title><link>https://tonybai.com/2005/01/17/dominoo-notes-part4/</link><pubDate>Mon, 17 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/17/dominoo-notes-part4/</guid><description>大家都是对软件充满无限激情的人，大家都致力于能开发出能被大家所广泛接受和使用的软件。可是激情归激情，我们还得脚踏实地。项目遇到了障碍，我们需要改变思路。 从04年的12月末到现在，大家好像都不约而同地沉寂了下来，好像大家都累了或者都在反思着某些事情，大家好像都有一个感觉就是我们对我们所要做的并不是那么的熟悉和了解。我们并不能详细而又清晰的勾勒出我们要做的东西的轮廓。想象一下一个没有吃过“葱烧海参”...</description></item><item><title>深入Java底层</title><link>https://tonybai.com/2005/01/16/deep_into_java/</link><pubDate>Sun, 16 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/16/deep_into_java/</guid><description>在一个朋友的书架上发现王森著的《Java深度历险》一书，看了书的前言了解该书是关于Java底层技术内幕的。怀着好奇心浏览了一下，谈不上有太多收获，但也记下了一些自认为有益的两点。 \* Java xxx 我们在命令行下敲入：“java xxx”后会发生什么呢？ 流程如下： 1.找到JRE； 2.找到JVM.dll； 3.启动JVM，并进行初始化； 4.产生Bootstrap Loader； 5.载...</description></item><item><title>Mix-in in Ruby</title><link>https://tonybai.com/2005/01/12/mix-in-in-ruby/</link><pubDate>Wed, 12 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/12/mix-in-in-ruby/</guid><description>在Matz的一篇PPT“Object-Oriented scripting in Ruby”中，Matz提到Ruby提供一种语言机制Mix-in，在其PPT中如是描述的“No Multiple Inheritance，but Mix-in”、“Mix-in is as strong as multiple inheritance，but simple”。 \* “module” in Ruby 在...</description></item><item><title>开放与封闭</title><link>https://tonybai.com/2005/01/09/open-and-close/</link><pubDate>Sun, 09 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/09/open-and-close/</guid><description>敏捷设计最基本原则：“开放封闭原则（OCP，Open-Close Principle）” \* 回顾SRP 在开始谈OCP之前，我们还是简单回顾一下Bob大叔在其书中所论述的敏捷设计的第一个原则“单一职责原则（SRP，Single Responsibility Principle）”。 Bob大叔在其书中将职责理解为“变化的原因”。一般当需求变化时，该变化就会反映为类的职责的变化。按书中所述“如果...</description></item><item><title>拥抱敏捷</title><link>https://tonybai.com/2005/01/07/embrace-agile/</link><pubDate>Fri, 07 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/07/embrace-agile/</guid><description>虽说Bob大叔（Robert C.Martin）的《敏捷软件开发–原则、模式与实践》一书在china mainland出版已经有一年之久了，但是我真正专下心看这本书还是在最近。也许敏捷开发思想和我最初脑海中的软件开发思想有些背道而驰，但是现在我正在准备拥抱它。 \* 重温经典的“敏捷软件开发宣言” 宣言部分摘录如下： 个体与交互         胜过     过程和工具 可以工作的软件     胜...</description></item><item><title>Oolong and Gnoloo</title><link>https://tonybai.com/2005/01/06/oolong-and-gnoloo/</link><pubDate>Thu, 06 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/06/oolong-and-gnoloo/</guid><description>看到这两个单词，我的第一感觉就是怪。第一个单词读起来像是“乌龙”的音译，查查金山词霸，哇！真是“乌龙茶”的意思，而第二个单词我查了半天都找不到，我想可能是作者自创的词吧。 What is Oolong and Gnoloo? Oolong是一种为Java虚拟机定制的汇编语言，其作者为Joshua Engel，Gnoloo则是将.class文件转成Onlong语言的一种反汇编工具。引用Joshua ...</description></item><item><title>结识Ruby</title><link>https://tonybai.com/2005/01/05/learn-ruby/</link><pubDate>Wed, 05 Jan 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/01/05/learn-ruby/</guid><description>Ruby是一个很好听的名字，给我的感觉就是“可爱的”。但它不是什么宠物之类的东西，它是一门语言，一门面向对象的脚本语言。虽然它的作者是日本人，但是摒弃民族偏见，我们还是应该以欣赏的和科学的眼光来看待它。 一、Install Ruby 我们以最新发布的ruby-1.8.2为例： \* unix platform 到http://www.ruby-lang.org/en/ 下载文件ruby-1.8.2...</description></item><item><title>再谈Mock Object</title><link>https://tonybai.com/2004/12/28/talk-about-mock-object-again/</link><pubDate>Tue, 28 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/28/talk-about-mock-object-again/</guid><description>发现静寂的夜能让我的思维加快。 用Mock Object进行Unit Test已经一周多了，发现以前对Mock Object还是很肤浅，即使是现在我也不敢说我对Mock Object的理解就一定正确。 这篇blog假设你已经熟悉JUnit、了解Mock和TDD。 如果你是直接开始使用JMock 、Easy Mock或者是MockMaker等Mock Object框架的，我建议你简单了解一下Mock...</description></item><item><title>JDK5.0源代码初览</title><link>https://tonybai.com/2004/12/15/glimpse-jdk5-source/</link><pubDate>Wed, 15 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/15/glimpse-jdk5-source/</guid><description>早就听说Sun开放了JDK的源代码，不过一直认为那么多源代码，根本没时间看，所以一直也没去下载。随着对Java了解的深入，览一览神秘的Java源代码的渴望是“与日俱增”，今天的工作不忙就去down了一份jdk5.0的源代码。 我是使用SCSL许可证下载的，解压后大约有190多MB。我最初的打算就是想看看java.lang包下一些类的实现。我吭哧吭哧的找了半天才在\\j2se\\src\\share...</description></item><item><title>认识Mock Object</title><link>https://tonybai.com/2004/12/10/learn-mock-object/</link><pubDate>Fri, 10 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/10/learn-mock-object/</guid><description>上周六我们Dominoo group讨论（以下称讨论）TDD和JUnit的时候，提到过Mock Object，那次可能是我第一次听到Mock Object这个概念，程序员对新鲜的的东西都是敏感的，所以今天晚上花了一些时间了解了一下Mock Object的概念，做了一些简单实践。 术语 Tested Object – 被测对象 Mock – 假的 or 仿制的对象 \* What is Mock O...</description></item><item><title>学习重构</title><link>https://tonybai.com/2004/12/09/learn-refactoring/</link><pubDate>Thu, 09 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/09/learn-refactoring/</guid><description>DMC采用驱动开发的方式，这就意味着重构“Refactoring”是我要学习的对象。早在大三的时候就已经把那本经典的“Refactoring Improving the Design of Existing Code”英文版买到手了，但就是在买回来后的第n天，它就被“打入冷宫”了。 \* What Is Refactoring? Refactoring is the art of safely i...</description></item><item><title>如何编写类中的setter和getter</title><link>https://tonybai.com/2004/12/08/how-implement-setter-and-getter/</link><pubDate>Wed, 08 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/08/how-implement-setter-and-getter/</guid><description>在effective java中有一item叫”保护性拷贝”，今天又看了许多部门里的代码，发现很多代码都与该item“相违”，晚上和toidi\_xu讨论这个问题有些收获。 Considering the following code: public class Box {         private int length;     public void setLength(int leng...</description></item><item><title>Dominoo项目日记(三)</title><link>https://tonybai.com/2004/12/06/dominoo-notes-part3/</link><pubDate>Mon, 06 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/06/dominoo-notes-part3/</guid><description>上周的主要工作是和toidi\_xu共同完成“把xml文件解析到java内存对象”的工作，但是一周下来发现我们的工作完成的并不好。 这周的前3天我一直在学习effective java，由于有java基础所以看起来也不是很费劲，自己也写了些小例子，之后由于周末要讨论tdd和junit所以我又花了近一天的时间来熟悉相关的资料。真正开始进入开发阶段是在周五的时候，我研究了一下dreamhead已经写的...</description></item><item><title>Effective Java阅读笔记-item异常</title><link>https://tonybai.com/2004/12/03/effective-java-notes-item-exception/</link><pubDate>Fri, 03 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/03/effective-java-notes-item-exception/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 39、只针对不正常的条件才使用异常 异常只应该被用于不正常的条件，它们永远不应该被用于正常的控制流。 40、对于可恢复的（recoverable conditions）使用被检查异常（checked exceptions）,对于程序错误(error)使...</description></item><item><title>Advanced CVS</title><link>https://tonybai.com/2004/12/02/advanced-cvs/</link><pubDate>Thu, 02 Dec 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/12/02/advanced-cvs/</guid><description>做了几个月的实际项目，感觉还是只用到CVS的皮毛，CVS中的高级功能比如create tag、create branch和merge等都未使用过。Dreamhead发过来一本”pragmatic version control-using CVS”，顺便do some practice and research on the advanced functions of CVS。 1、Tags、Br...</description></item><item><title>Effective Java阅读笔记-item18</title><link>https://tonybai.com/2004/11/30/effective-java-notes-item18/</link><pubDate>Tue, 30 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/30/effective-java-notes-item18/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 18、优先考虑静态成员类（static member class） 在C++的应用中我们很少使用嵌套类，我只在MFC和COM组件中遇到过这些，而且这些嵌套类被隐藏在应用背后，一般的应用中则很少使用。而在Java中嵌套类的应用还是要比在C++中多些。Ja...</description></item><item><title>Effective Java阅读笔记-item24、25、34</title><link>https://tonybai.com/2004/11/30/effective-java-notes-item24-item25-item34/</link><pubDate>Tue, 30 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/30/effective-java-notes-item24-item25-item34/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 24、需要时使用保护性拷贝 在学习这个item之前我们看看下面这段“危险的”代码（改编自书中例子）： Considering the following code: //Period.java import java.util.Date; public...</description></item><item><title>Effective Java阅读笔记-item13、14</title><link>https://tonybai.com/2004/11/29/effective-java-notes-item13-and-item14/</link><pubDate>Mon, 29 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/29/effective-java-notes-item13-and-item14/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 13、支持不变性（immutable） 我感觉我们只需记住书中列出的几条规则： 1\. 不要提供任何&amp;#34;可修改对象內容&amp;#34;的方法 2\. 保证没有可被子类override的方法 3\. 令所有field为 final 4\. 令所有field都是 priv...</description></item><item><title>Effective Java阅读笔记-item16</title><link>https://tonybai.com/2004/11/29/effective-java-notes-item16/</link><pubDate>Mon, 29 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/29/effective-java-notes-item16/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 16、接口优于抽象类 作者有一个观点就是: \* 接口是定义mixin(混合类型)的理想选择。 mixin的定义：一个类除了实现它的基本类型”primitive type”之外，还可以实现这个mixin类型，以表明它提供可供选择的行为，也就是说它允许将...</description></item><item><title>Dominoo项目日记(二)</title><link>https://tonybai.com/2004/11/27/dominoo-notes-part2/</link><pubDate>Sat, 27 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/27/dominoo-notes-part2/</guid><description>Dominoo项目从10月份启动到现在已有近2月，我们做了些工作，但是项目的进度缓慢也是我们几个人有目共睹的。针对前一阶段的工作上的不利局面，我们几个做了一次讨论。 最近两周的工作使我们的Dominoo有了很大进展，经过大家的讨论我们在一些技术问题上达成了共识。dreamhead建议我和toidi\_xu结对编程，并将dmc的XML解析的工作交给我们来做（毕竟我在java编程上还属于菜鸟级），而d...</description></item><item><title>Effective Java阅读笔记-item12</title><link>https://tonybai.com/2004/11/27/effective-java-notes-item12/</link><pubDate>Sat, 27 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/27/effective-java-notes-item12/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 从item12~item18讨论的都是单个类或接口的设计技术。 12、使类和成员的可访问能力最小化 作者提出“你应尽可能的是每一个类或成员不被外界访问” \* 顶层类或接口的访问级别   public — 意味着你的类是提供给客户API的一部分，你有义...</description></item><item><title>Effective Java阅读笔记-item4、6</title><link>https://tonybai.com/2004/11/27/effective-java-notes-item4-and-item6/</link><pubDate>Sat, 27 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/27/effective-java-notes-item4-and-item6/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 4、避免创建重复对象 我们知道构造函数每次被调用的时候都会创建一个新的对象，在有些情况下这样会很浪费。那我们能不能重复使用一个对象（这个对象应该是immutable的），而不是在每次需要的时候都要创建一个新的对象呢？这就是这个item4所要讲述的事情。...</description></item><item><title>Effective Java阅读笔记-item1</title><link>https://tonybai.com/2004/11/26/effective-java-notes-item1/</link><pubDate>Fri, 26 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/26/effective-java-notes-item1/</guid><description>Dreamhead把他用大把银子买来的“Effective Java”借给我阅读，我真是很感动亚，我只能用行动来感谢Dreamhead了。^\_^ 1、使用静态工厂方法代替构造函数 静态工厂方法优点： 可命名性：（而构造函数的名字必须和类名一致），使class使用起来较容易，构造函数只是根据不同的函数signature来区分，对使用者来说容易发生调用错误。 内部cache特性：在静态工厂内部可采用...</description></item><item><title>Everything is an object</title><link>https://tonybai.com/2004/11/22/everything-is-an-object/</link><pubDate>Mon, 22 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/22/everything-is-an-object/</guid><description>读过《Thinking in Java》中著名的一章“Everything is an object”，而且不止一遍,不过经过今天和Dreamhead的探讨，才发现我对Java中的“Everything is an object”的理解还是那么的不到位。 我和Dreamhead谈到我在研究Java 5.0时遇到的问题： String\[\] s = {“Hello” ,              ...</description></item><item><title>Java 5.0新特性研究(二)</title><link>https://tonybai.com/2004/11/22/java5-research-part2/</link><pubDate>Mon, 22 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/22/java5-research-part2/</guid><description>今天在“Java技术论坛”上看到了“J2se5.0新增小功能”这个帖子，大家的集思广益让我又有了一些收获。 1、再谈java引入的格式化输入和输出 在“Java 5.0新特性研究(一)”中，当时只是看了一些简单的例子，自己也没有深入看看jdk5.0的doc。今天看到论坛上的一些例子还是把我吸引了，自己又翻了翻昨天刚下的jdk5.0的doc，觉得java引入的新的格式化输入输出还是蛮好的^\_^。 ...</description></item><item><title>Java 5.0新特性研究(一)</title><link>https://tonybai.com/2004/11/19/java5-research-part1/</link><pubDate>Fri, 19 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/19/java5-research-part1/</guid><description>DreamHead计划使用&amp;#34;Java 5.0 Tiger&amp;#34;来开发我们的Dominoo，理由是：2-3年后&amp;#34;Tiger&amp;#34; will be mature。 我们对刚刚发布不久的&amp;#34;Tiger&amp;#34;了解的不多，晚上我们几个group member坐了下来，听DreamHead讲解&amp;#34;Tiger&amp;#34;的新特性。回到寝室自己做了些实验，有了些体会。 通过对&amp;#34;Tiger&amp;#34;的讨论和研究，得知Sun推出&amp;#34;Tiger&amp;#34;目的就是...</description></item><item><title>CVS Primer</title><link>https://tonybai.com/2004/11/17/cvs-primer/</link><pubDate>Wed, 17 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/17/cvs-primer/</guid><description>CVS Repository?  –&amp;gt; checkout(co)  –&amp;gt; commit(ci)  –&amp;gt; update(up) Repository vs Modules?    –Repository is the modules’s container    –Module is often a project Repository has four main parts :    –main ...</description></item><item><title>C++ Advanced Training(二)</title><link>https://tonybai.com/2004/11/12/cpp-advanced-training-part2/</link><pubDate>Fri, 12 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/12/cpp-advanced-training-part2/</guid><description>今天侯老师花了2个小节的时间把昨天的“尾巴”讲完，然后就进入今天的正题OOP，注意是OOP，not OOD。 听了侯老师的两天课，感觉他的讲课风格是： \- 关注细节 \- 以讲”故事”的方式来讲解抽象的技术。 我将继续接上一节的内容谈C++。 1、Increment operator（++） ++ operator分为 ++A 和A++两种，实际在实现中A++调用了++A。我们举个例子 clas...</description></item><item><title>C++ Advanced Training(一)</title><link>https://tonybai.com/2004/11/09/cpp-advanced-training-part1/</link><pubDate>Tue, 09 Nov 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/11/09/cpp-advanced-training-part1/</guid><description>作为一名刚来公司不久的新员工，有幸参加由侯捷老师做的高级C++培训，真的是很高兴。从接触Programming以来，C++一直是自己的主打语言(虽然最近正在研究Java^\_^)。一天的培训下来，收获还是蛮大的，侯老师的细致入微的讲解给我留下了很深的印象。将我所得到的东西与大家分享同时对我来说又是个复习的过程，不失为一箭双雕之举^\_^。 这次的高级C++培训分3个部分，分别为C++&amp;amp;ADT（一个...</description></item><item><title>Dominoo项目日记(一)</title><link>https://tonybai.com/2004/10/10/dominoo-notes-part1/</link><pubDate>Sun, 10 Oct 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/10/10/dominoo-notes-part1/</guid><description>国庆节前夕见到了Darwin\_yuan,他给我们带来了Dominoo。 Dominoo是什么？ 在Darwin\_yuan的blog中是这样描述的:Dominoo means &amp;#34;Design Of Model IN Object-Oriented.&amp;#34;,从字面的意思来理解Dominoo就是“用面向对象的方法进行模型设计”。 Dominoo的主要意图是什么？ Dominoo的提出的大背景是UML、M...</description></item><item><title>Java基础</title><link>https://tonybai.com/2004/10/10/java-basics/</link><pubDate>Sun, 10 Oct 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/10/10/java-basics/</guid><description>.jdk的安装 .环境变量的配置 .Eclipse IDE的安装和配置 .Java编码规范 1、jdk的安装 Java &amp;#34;Java&amp;#34;)号称跨平台，实际上其本身就是个平台，我们要使用Java开发应用程序，我们首先就要安装Java平台，所谓Java平台就是指Java的运行环境（JRE）和相应的SDK。 这里我们选择j2sdk1.4.2来作为我们的Java平台，安装过程只需一路next即可。安装结束后，...</description></item><item><title>连接Oracle</title><link>https://tonybai.com/2004/09/16/connect-oracle/</link><pubDate>Thu, 16 Sep 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/09/16/connect-oracle/</guid><description>Oracle是个庞大又复杂的数据库系统，就连连接Oracle的程序也不简单，在leader的推荐下我选择了toad，以前从来没听说过，后来到网上查了查才发现它是那么的出名。开始以为装好toad，配置一下就可以访问到数据库了，可是事与愿违，遭遇到挫折后，才知道还要装Oracle的客户端程序。我们的内网上有很多Oracle安装程序，从一个ftp上down下来一个oracle8.1.7的安装程序，按提示...</description></item><item><title>本不是第一篇的第一篇</title><link>https://tonybai.com/2004/09/15/the-first-blog/</link><pubDate>Wed, 15 Sep 2004 00:00:00 +0800</pubDate><guid>https://tonybai.com/2004/09/15/the-first-blog/</guid><description>刚入司时，给我们做技术培训的老员工强烈向我们推荐blog这个新兴（起码对我来说是新的^\_^）的咚咚，当时也想写就申请了一个，可是不知一天都忙些什么了，到今天才写了这第一篇，要说今天为什么要写，两个字“心烦”，本来我的第一篇blog在我的头脑中早已构思多次了，内容也换了多次，可是都没能实现，这篇blog是在丝毫没想的前提下动手写的。我觉得这样也不错，现在我的感觉就是想写就写，不用考虑太多，呵呵。 ...</description></item></channel></rss>