The Go

RSS: https://go.dev/blog/feed.atom
The Go Blog 的网站。

Go 中的架构特定 SIMD

Go 1.27 在已有 amd64 SIMD 实验性 API 的基础上,新增 arm64 和 wasm 两个架构的 SIMD 支持。通过 GOEXPERIMENT=simd 可启用,核心定义在 simd/archsimd 包中,定位为类似其他语言中的 intrinsics 层。 API 设计强调可读性与易用性,例如将底层指令 _mm512_slli_epi64 命名为 ShiftAllLeft,并将部分硬件细节留给编译器优化而非暴露给用户。 文章介绍了从 simd 包切换到 archsimd 的方式(ToArch/FromArch),并征求关于可用性和性能的社区反馈。对 Go 高性能计算和 SIMD 优化方向有直接参考价值。
评论点赞收藏2 天前

Go 中平台无关的 SIMD

Go 1.27 引入实验性跨平台 SIMD API(simd 包),目标是让开发者编写一次接近汇编性能、可在多架构运行的向量化代码,并在不支持 SIMD 的平台自动模拟。 文章详细解释了各架构(amd64/AVX 系列、arm64/NEON、wasm)在向量宽度、掩码机制、操作支持上的差异,说明 simd 包取交集并用 2-3 条指令模拟缺失操作。 提供了完整的操作支持表、内积示例、OnesCount 跨平台实现(含汇编级分支和纯 Go 模拟回退)以及 GODEBUG 调试方式。适用于计算密集型场景(加密、数据处理、AI),目前需设置 GOEXPERIMENT=simd 启用。
评论点赞收藏8 天前

平台无关的 Go SIMD

Go 1.26/1.27 引入实验性 SIMD API,amd64 先支持,1.27 扩展到 arm64 NEON 和 wasm,并提供平台无关、大小无关的 portable simd 包,参考 C++ Highway 设计,目标是"写一次、接近汇编性能",没有 SIMD 的平台用模拟实现。 此前只能用汇编访问 SIMD,门槛高,大量计算密集代码没用上 CPU 向量能力。Go 自己的 Green Tea GC 也在用 SIMD 加速堆扫描。内容偏一手技术公告,有具体 API 演进和平台覆盖说明,对性能敏感和跨平台 Go 开发者有直接价值。
评论点赞收藏10 天前

Go 1.27 引入尺寸特化内存分配,小块分配提速 20%–30%

Go 1.27 为 80 字节以下的内存分配引入尺寸特化分配函数,特定大小的对象分配可提速 20%–30%,分配密集的程序整体可快约 1%。文章解释原理:runtime 的 mallocgc 按“size class”管理自由对象池(如 17–24 字节归为 class 3),并按是否含指针拆成不同 span 供 GC 记账。 编译器对逃逸到堆或需动态分配的对象插入 newobject,把尺寸和指针特征传给 mallocgc;新加入的特化函数针对已知尺寸做更多假设,减少分支与 bookkeeping,使生成代码更易优化。 适合关心 Go 底层性能、JIT/分配器优化的读者,属于一手官方设计说明,信息增量明确但争议性一般。
评论点赞收藏18 天前

Goroutine泄漏的Profile分析

<h2></h2><h2>Goroutine 泄露配置文件</h2><p>弗拉德·赛奥克<br>2026年9月2日</p><p>去吧强大且易用,但同样的简单性有时也会让经验丰富的开发者犯错。幸运的是,Go 生态系统配备了有用的调试工具,例如,,但即使是现有工具也可能忽略一些并发错误,比如本文主题<em>goroutine 泄露</em>.</p><p>Goroutine通过共享的并发原语(如通道、锁和等待组)同步或交换信息。在通信过程中,goroutine 通常<em>封锁</em>在这些原语上,比如等待满足某个条件;常见的例子包括等待获取持有的互斥组,或通过通道接收消息。<br><br>Goroutine 还可以阻止操作系统操作,比如从网络套接字或文件读取。</p><p>如果一个goroutine被阻塞,我们可以认为它泄露了,但解除阻塞所需的条件永远无法满足。随着时间推移,泄漏的goroutine的累积会通过过度的内存使用(泄露的goroutine本身或其引用的内存)以及垃圾回收器带来的CPU使用率,降低性能<code>GOMEMLIMIT</code>正在使用。</p><p>Goroutine泄露通常非常难以被发现。在单元测试中,最重要的突破包括可以对单个测试进行仪器化,在测试结束后,将任何未终止的流程标记为可疑。<br><br>同样,Go 1.25引入了标准库;它可以通过让 Go 开发者更好地控制并发事件的顺序,从而可靠地测试难以复现的场景,从而显著提升并发代码单元测试的质量。</p><p>遗憾的是,这两种方法都无法检测…</p>
评论点赞收藏32 天前

Go 1.27 新增泛型方法:从函数到类型的最后一块拼图

Go 1.27 正式为方法添加泛型类型参数,填补了 Go 1.18 引入泛型时留下的空白。此前泛型只支持函数和类型,不支持方法,官方理由是泛型接口方法难以高效实现;Go 1.27 改变了这一判断。 文章通过链表和排序等代码示例演示了新特性的用法和设计思路转变。
评论点赞收藏39 天前

Go 1.27 正式发布:泛型方法、结构体初始化与工具链现代化

<h2></h2><h2>Go 1.27发布</h2><p>尼古拉斯·胡辛,代表围棋队<br>2026年8月19日</p><p>今天,Go 团队很高兴发布 Go 1.27。你可以在.</p><p>Go 1.27 在语言、工具链、运行时和标准库方面带来了重大改进。以下是一些关键亮点。</p><h2>语言变化</h2><p>Go 1.27 引入了三个显著的更新.</p><p>首先,通用方法现在被支持。例如,参见:</p><pre><code>// Prior to Go 1.27, a separate method on Rand had to be added for each type // (unsigned integer methods omitted for brevity). func (r *Rand) Int32N(n int32) int32 func (r *Rand) Int64N(n int64) int64 func (r *Rand) IntN(n int) int // Go 1.27 adds a new generic method that works for all integer types. func (r *Rand) N[Int intType](n Int) Int </code></pre><p>第二,钥匙在现在可能有效对于结构类型,允许嵌套或嵌入结构体中的字段直接初始化:</p><pre><code>type Habitat struct { Burrow…</code></pre>
评论点赞收藏45 天前

Go 1.27 发布记录索引

Go 官方发布记录索引页,列出从 go1 到 go1.27 的所有大版本发布时间,go1.27.0 于 2026-08-19 发布。每版下方附有 minor 修订版本的发布日期和安全修复列表。
评论点赞收藏45 天前

The Pkg.go.dev API

The Go Blog Introducing the API Ethan Lee, Hana Kim, and Jonathan Amsterdam 21 May 2026 Since its inception, has established itself as the Go community’s primary resource for package documentation and...
评论点赞收藏132 天前

Type Construction and Cycle Detection

The Go Blog Type Construction and Cycle Detection Mark Freeman 24 March 2026 Go’s static typing is an important part of why Go is a good fit for production systems that have to be robust and reliable....
评论点赞收藏193 天前

//go:fix inline and the source-level inliner

The Go Blog //go:fix inline and the source-level inliner Alan Donovan 10 March 2026 Go 1.26 contains an all-new implementation of the go fix subcommand, designed to help you keep your Go code up-to-da...
评论点赞收藏206 天前

Allocating on the Stack

The Go Blog Allocating on the Stack Keith Randall 27 February 2026 We’re always looking for ways to make Go programs faster. In the last 2 releases, we have concentrated on mitigating a particular sou...
评论点赞收藏218 天前

Using go fix to modernize Go code

The Go Blog Using go fix to modernize Go code Alan Donovan 17 February 2026 The 1.26 release of Go this month includes a completely rewritten go fix subcommand. Go fix uses a suite of algorithms to id...
评论点赞收藏228 天前

Go 1.26 Is Released

The Go Blog Go 1.26 is released Carlos Amedee, on behalf of the Go team 10 February 2026 Today the Go team is pleased to release Go 1.26. You can find its binary archives and installers on the downloa...
评论点赞收藏235 天前

Go's Sweet 16

The Go Blog Go’s Sweet 16 Austin Clements, for the Go team 14 November 2025 This past Monday, November 10th, we celebrated the 16th anniversary of Go’s open source release! We released Go 1.24 in Febr...
评论点赞收藏323 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。