无聊的API是最好的API:从系统设计到接口契约的九条法则

本文永久链接 – https://tonybai.com/2025/08/29/good-api-design 大家好,我是Tony Bai。 在解读《Everything I know about good system design》一文时,我们曾提炼出一个核心观点:“无聊即可靠”。这个看似反直觉的法则,在追求创新与复杂的软件工程世界里,如同一股清流。现在,这个“无聊”哲学将从宏观的系统设计,延伸至微观但至关重要的领域——API设计。 Sean Goedecke在其后续力作《Everything I know about good API design》中,再次强调了这一理念。他认为,一个伟大的API,必然是“无聊”的。它不应追求新奇或有趣,而应像一把用了多年的锤子,让使用者拿起就能用,无需思考。 ...

August 29, 2025 · 9 min · Tony Bai

Go 解析器的“隐秘角落”:encoding/json 的安全陷阱与 JSONv2 的救赎

本文永久链接 – https://tonybai.com/2025/06/22/unexpected-security-footguns-in-go-parsers 大家好,我是Tony Bai。 在 Go 语言中,标准库的 encoding/json 包无疑是我们日常打交道最多的伙伴之一。它简洁易用,性能尚可,支撑了无数 Go 应用的数据交换需求。然而,正如俗话所说,“最熟悉的地方可能藏着最深的坑”,最近拜读了知名安全公司 Trail of Bits 的一篇深度剖析文章——“Unexpected security footguns in Go’s parsers”(Go 解析器中意想不到的安全“绊脚石”)——让我对这个朝夕相处的伙伴有了全新的、甚至可以说是“惊出一身冷汗”的认识。 ...

June 22, 2025 · 11 min · Tony Bai

Go安全版图再添利器:OpenPubkey SSH开源,用SSO彻底改变SSH认证

Go安全版图再添利器:OpenPubkey SSH开源,用SSO彻底改变SSH认证 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

March 31, 2025 · 10 min · Tony Bai

Go map使用Swiss Table重新实现,性能最高提升近50%

本文永久链接 – 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已经被纳入Go 1.24里程碑。 ...

November 14, 2024 · 16 min · Tony Bai

构建无密码认证:passkey入门与Go实现

本文永久链接 – https://tonybai.com/2024/11/01/introduction-to-passkey 传统的密码认证一直以来都是数字时代的主流身份验证方式。然而,用户常常选择易记的弱密码并重复使用,导致账号易受攻击。密码泄露、钓鱼攻击等安全问题层出不穷,超过80%的数据泄露与密码相关。 截图来自FIDO联盟官网 与此同时,频繁的密码管理和忘记密码情况严重影响用户体验。服务商在安全保存用户密码方面的责任也增加了系统建设和维护的成本。为了应对这些问题,科技行业开始积极探索无密码认证的方法。 无密码认证利用设备生物识别、硬件加密和其他更安全的验证手段,提供了更安全的登录体验。在Thoughtworks最新一期(第31期)技术雷达文档中,一种名为passkey的无密码认证技术被列入“试验” 象限,许多读者可能在github或其他支持passkey的站点和应用中使用过这一技术了。 ...

November 1, 2024 · 14 min · Tony Bai

Go开发者的密码学导航:crypto库使用指南

本文永久链接 – https://tonybai.com/2024/10/19/go-crypto-package-design-deep-dive Go号称“开箱即用”,这与其标准库的丰富功能和高质量是分不开的。而在Go标准库中,crypto库(包括crypto包、crypto目录下相关包以及golang.org/x/crypto下的补充包)又是Go社区最值得称道的Go库之一。 ...

October 19, 2024 · 25 min · Tony Bai

通过实例理解Web应用的机密管理

本文永久链接 – https://tonybai.com/2023/11/08/understand-go-web-secret-management-by-example 如果你是一个Web应用系统的开发人员,你的日常大概率是“乐此不疲”地做着CRUD的活儿,很少接触到安全方面的内容。如果这时有人和你提到“机密(信息)管理(secret management)”,你大概率会说:那是啥?和我有关系吗? ...

November 8, 2023 · 33 min · Tony Bai

通过实例理解Go Web身份认证的几种方式

本文永久链接 – https://tonybai.com/2023/10/23/understand-go-web-authn-by-example 在2023年Q1 Go官方用户调查报告中,API/RPC services、Websites/web services都位于使用Go开发的应用类别的头部(如下图): ...

October 23, 2023 · 29 min · Tony Bai

基于公钥验签实现应用许可机制

本文永久链接 – https://tonybai.com/2023/10/16/implementation-of-app-licensing-based-on-verifying-sign-by-pubkey 随着互联网的普及以及应用的快速发展,商业软件的订阅模式变得越来越流行。软件公司开始提供基于订阅的服务,用户每月或每年支付费用以获取软件的使用权。这种模式使用户可以更灵活地选择服务期限,并且软件公司可以持续提供更新和技术支持。随着“软件定义汽车”的到来,这种模式在智能网联汽车领域也逐渐流行开来! ...

October 16, 2023 · 9 min · Tony Bai

Go TLS服务端绑定证书的几种方式

本文永久链接 – https://tonybai.com/2023/10/13/multiple-ways-to-bind-certificates-on-go-tls-server-side 随着互联网的发展,网站提供的服务类型和规模不断扩大,同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)已然成为Web服务最重要的安全基础设施之一。默认情况下,一个TLS服务器通常只绑定一个证书,但当服务复杂度增加时,单一证书已然难以满足需求。这时,服务端绑定多个TLS证书就成为一个非常实用的功能。 ...

October 13, 2023 · 13 min · Tony Bai