Web Analytics

Go 1.25中值得关注的几个变化

本文永久链接 – 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 版本起,这一系列文章已经伴随大家走过了十一个年头。 ...

August 15, 2025 · 8 min · Tony Bai

Go json/v2实战:告别内存爆炸,掌握真流式Marshal和Unmarshal

本文永久链接 – https://tonybai.com/2025/08/09/true-streaming-support-in-jsonv2 大家好,我是Tony Bai。 Go 开发者长期以来面临一个痛点:标准库 encoding/json 在处理大型 JSON 数据时,即使使用 Encoder/Decoder,也因其内部的全量缓冲机制而导致巨大的内存开销。备受期待的 encoding/json/v2 提案(#71497)旨在从根本上解决这一问题。通过引入全新的底层包 encoding/json/jsontext,v2 实现了真正的流式处理能力。本文将通过具体的、可量化的基准测试,向你展示 v1 的内存陷阱,并演示如何使用 json/v2 高效地实现流式处理大规模 JSON 数据,彻底告别内存爆炸的烦恼。 ...

August 9, 2025 · 6 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

API设计的“Go境界”:Go团队设计MCP SDK过程中的取舍与思考

本文永久链接 – https://tonybai.com/2025/05/23/go-api-design-mcp-sdk 大家好,我是 Tony Bai。 作为开发者,我们每天都在与 API 打交道——调用它们,设计它们,有时也会为糟糕的 API 设计而头痛不已。一个优秀的 API,如同一位技艺精湛的向导,能清晰、高效地引领我们通往复杂功能的彼岸;而一个蹩脚的 API,则可能像一座布满陷阱的迷宫,让我们步履维艰。 ...

May 23, 2025 · 14 min · Tony Bai

手把手带你玩转GOEXPERIMENT=jsonv2:Go下一代JSON库初探

本文永久链接 – https://tonybai.com/2025/05/15/go-json-v2 大家好,我是Tony Bai。 Go 语言标准库中的 encoding/json 包,无疑是我们日常开发中使用频率最高的包之一。它为 Go 社区服务了十多年,几乎无处不在。但与此同时,它也因一些历史遗留的 API 缺陷、行为不一致以及在某些场景下的性能瓶颈而受到过不少讨论和批评。社区中甚至涌现出像Sonic、go-json、easyjson 等一系列高性能的第三方 JSON 库作为替代。 ...

May 15, 2025 · 14 min · Tony Bai

Go encoding/json/v2提案:JSON处理新引擎

本文永久链接 – 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类型自定义JSON格式的特性,赢得了Go开发者的青睐。 ...

February 5, 2025 · 18 min · Tony Bai

JSON包新提案:用“omitzero”解决编码中的空值困局

JSON包新提案:用“omitzero”解决编码中的空值困局 | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 JSON包新提案:用“omitzero”解决编码中的空值困局 九月 12, 2024 0 条评论 ...

September 12, 2024 · 8 min · Tony Bai

将Roaring Bitmap序列化为JSON

本文永久链接 – https://tonybai.com/2023/02/01/serialize-roaring-bitmap-to-json 近期在实现一个数据结构时使用到了位图索引(bitmap index),本文就来粗浅聊聊位图(bitmap)。 一. 什么是bitmap 位图索引使用位数组(bit array,也有叫bitset的,通常被称为位图(bitmap),以下均使用bitmap这个名称)实现。一个bitmap是一个从某个域(通常是一个整数范围)到集合{0,1}中的值的映射: ...

February 1, 2023 · 9 min · Tony Bai

关于xml包在Unmarshal时将 重写为 的问题

今年4月份,中国移动、中国电信、中国联通三大运营商联合举行线上发布会,发布了《5G消息白皮书》。所谓5G消息,即传统短信消息(仅能进行文本展示)的升级版,是由GSMA组织制定的RCS(Rich Communication Suite)消息规范所定义。2019年RCS UP(unified profile)更新到2.4版本,并成为了5G终端标准的一部分,该版本也是第一个具备商用能力的版本,为5G消息商用奠定了基础。中国移动计划2020.6月末正式实现5G消息的商用,目前已经在浙江和广东建立了两个5G消息的支撑节点(分别由中兴和华为承建)。作为电信移动增值领域的厂商,我方也参与了与浙江节点进行行业5G消息平台(MaaP)联调与应用开发。 ...

June 4, 2020 · 6 min · Tony Bai

go protobuf v1败给了gogo protobuf,那v2呢?

近期的一个项目有对结构化数据进行序列化和反序列化的需求,该项目具有performance critical属性,因此我们在选择序列化库包时是要考虑包的性能的。 ...

April 24, 2020 · 7 min · Tony Bai