Go周刊2026W37 | Ebitengine 纯 Go 化、simd 重写 TurboPFor、json/v2 落地

本周 Go 生态主线是纯 Go 化与标准库演进:Ebitengine 2.10 在桌面平台彻底摆脱 cgo,Debian 代码搜索用实验性 simd 包以纯 Go 重写 TurboPFor 并跑得更快,yzma 1.26 新增 WebAssembly 支持可在网页内推理。标准库侧则回望 encoding/json/v2 的十四年长路。

🔥 头条

Go 能否在没有 C 编译器的情况下构建 cgo 包?

用 import "C" 做交叉编译很痛苦,因为它需要一条 C 工具链。该提案允许那些只调用预编译 C 库的包,在带注解的 Go 文件中描述接口,这样构建该包的人就不再需要 C 编译器。

📖 文章

Debian 代码搜索如何用纯 Go 与 SIMD 实现高速 TurboPFor

这篇文章献给性能爱好者!详细记录了如何用 Go 实验性的 simd/archsimd 包,以原生 Go 替换一个 C 库并且跑得更快。内容涵盖 PGO 带来的意外、用泛型做编译期特化、AVX2/AVX512 内核等。

Ebitengine 2.10:桌面平台现已纯 Go

经过多年努力,这个流行的 2D 游戏引擎在 macOS、Linux 和 BSD 上不再需要 cgo(Windows 此前已如此),交叉编译因此容易得多。它还新增了一项能力:把应用作为可控制的来宾进程运行,既可以无头运行用于测试,也可以嵌入其他应用。

yzma 1.26:在 Go 中做本地 LLM 推理,如今可在浏览器运行

通过 llama.cpp 在 Go 中运行视觉与语言模型,无需 cgo(得益于 purego 与 ffi)。值得注意的是,v1.26.0 新增了 WebAssembly 支持,因此 TinyGo 构建可以直接在网页上运行推理。

在 Go 中做超高速数据包处理的四种方式

对比 AF_PACKET、AF_XDP、DPDK 与 Mellanox Direct Verbs,给出真实吞吐量数据,以及一个把它们封装起来的库。

Sloc Cloc and Code:我是不是被 Buster Scruggs 了一把?

一个关于性能剖析 scc 的故事:在某个 Rust 竞品号称统计速度快 2.5 倍之后,作者如何重新夺回领先。

通过互引用类型参数实现类型契约

版本控制数据库 Dolt 故意对一种列类型打破分支隔离:自增值从不跨分支复用,因此两个都插入过行的分支合并时不会冲突。这一保证因第二个产品 Doltgres 而变得复杂------它必须在共享同一份代码的同时说出 Postgres 的 SERIAL 方言,迫使团队在两类特性的分叉处定义接口。文章展示了如何用互引用的类型参数把这种差异编码进类型系统。

我为 Go 做了贡献:你也可以这样做

Google 账号是给 Go 提补丁的第一道门槛------不是代码审查,而是登录。Go 的贡献指南、Cla 流程和 gerrit 机制与其他 GitHub 项目差异极大,第一次提 PR 的人常在动手写代码前就被流程卡住。文章按顺序走完整个流程:从阅读官方指南、签署贡献者协议,到提交第一份 patch 的每一步。

encoding/json/v2 的十四年长路

十四年来,Go 的 encoding/json 一直带着无人能修的缺陷发布------其中就包括字段名大小写不敏感匹配------因为 v1 的行为被兼容性承诺锁死了。他们为何一直按兵不动:每一次尝试修复都会破坏生态,于是变通方案只能留在第三方包里,直到语言能够正式确立 v2。这本书沿着 issue、提案、Gerrit 变更与标准库源码,追溯 Go 1.27 中 encoding/json/v2 背后的这条长路,也讲述 v1 如何叠在 v2 之上,以及此后生态会发生什么变化。

🛠 工具

go-oracledb:Oracle 数据库的官方纯 Go 驱动

目前仍是 beta,但 Oracle 官方推出 Go 客户端这件事值得关注。已有的第三方选择是 go-ora(同样是纯 Go)和 godror(通过 cgo 使用 Oracle 的客户端库)。

📝 简讯

JetBrains 近期举办了 Go 1.27"发布派对"

JetBrains 近期举办了 Go 1.27"发布派对",邀请了几位 Go 团队成员参与。可在此观看录像,其中包括 Robert Griesemer 解释为什么泛型方法花了这么久才到来。

长期贡献者 thepudds(又称 PJ)已加入 Go 核心团队

长期贡献者 thepudds(又称 PJ)已加入 Go 核心团队。Russ Cox 对此十分赞赏,说"这对 Go 团队来说是一次很棒的招聘"。

Go 1.28 似乎很可能拒绝 byte 或 rune 以外的整数转 string(x)

Go 1.28 似乎很可能拒绝把 byte 或 rune 以外的整数转换为 string(x),与 go vet 的警告保持一致。(Rob Pike 在 14 年前就提出过这一点!)

Jake Bailey 提交 CL,让 encoding/json/v2 序列化切片快约 4%

Jake Bailey 有一些 CL 正在评审中,目标是让 encoding/json/v2 序列化切片比 v1 快约 4%,此前 Daniel Lemire 最近发现它慢了 1.5 倍。

📦 版本

gomodjail 2.0:实验性的 Go 模块隔离沙箱

来自 Lima 作者的一个有趣思路,用于约束 Go 依赖:在 go.mod 中用一条注释标记某个模块,如果它能触达文件系统、网络、原始系统调用等,gomodjail analyze 检查就会失败。

VHS 0.12:为你的 CLI 准备的"家庭录像机"

一个工具加一门脚本语言,用于在终端上执行操作,并录制为动图 GIF、MP4、WebM 或 PNG 帧序列。非常适合做演示或教程。v0.12.0 允许按行与列(而不只是按像素)设定输出尺寸。


往期精选


阅读原文

相关推荐
devpotato1 小时前
RPO与RTO:容灾的两个关键指标
java·后端
codigger2 小时前
程序员别再踩这 3 个坑——做了五年开发,我把能踩的坑全踩了一遍
后端·ai·程序员·架构·程序员职场
掘金挖土2 小时前
前端手摸手跑路之 AI 应用开发(六)
前端·后端
cidy_982 小时前
06 — Model 层:数据模型与操作
后端
TechLee2 小时前
一行代码防水平越权:用 PHP-Casbin 终结业务里的数据级 if-else
后端·php
步行cgn2 小时前
Spring 底层如何创建对象:反射机制与实例化策略
java·后端·spring
Lyra_Infra2 小时前
从 MySQL 到达梦:一次信创隔离环境里的数据库迁移踩坑实录
数据库·后端·mysql
程序员天天困2 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
大数据·后端·kafka
@PHARAOH2 小时前
WHAT - 从前端组件化思维到后端架构设计入门
前端·微服务·架构