go+Go Atlas版本特性图谱
官方文档 ↗
受支持的正式系列go1.26.8

Go 1.26

让指针初始化与泛型关系更直接

new 支持表达式,泛型约束可引用自身,errors.AsType 简化按类型提取错误。

查看发布说明 ↗
LEARN BY DOING

学习路线与升级检查

已有 Go 基础可从示例开始;首次学习建议先完成 Go Tour ↗ 中的函数、切片、接口与并发部分。历史版本用于理解演进,新项目选用受支持的正式版本。

这一版怎么学

  • 01 · new 支持初始值表达式

    构造使用指针表示可选值的字段。

  • 02 · 自引用泛型约束

    描述返回相同具体类型的 Add 等操作。

  • 03 · errors.AsType

    提取被包装的具体错误类型。

升级前检查

  • new(表达式) 需要 Go 1.26 语言版本,旧工具链无法编译。
  • 使用新版 go fix 迁移代码时审查修改并运行测试。
  • 实验性 SIMD 等功能单独验证,不默认视为普通构建可用。

官方发布说明 ↗ · 核对于 2026-10-06

THE HIGHLIGHTS

这一版,值得关注 03

01语法

new 支持初始值表达式

new 除了接受类型,还能接受表达式,返回保存该值的新变量指针。

怎么用构造使用指针表示可选值的字段。

旧版做法先声明临时变量再取地址,或编写指针辅助函数。

注意事项new(int) 仍表示零值分配;new(42) 表示值初始化,不能混淆两种含义。

官方依据 ↗ · 最低版本 1.26 · 核对于 2026-10-06

运行示例保存为 main.go,在 go.mod 声明 go 1.26 或以上的项目中执行 go run .

Go 1.26 · main.go
package main
import "fmt"
func main() { age := new(42); fmt.Println(*age) }
运行结果
42
02类型

自引用泛型约束

泛型类型的类型参数列表可以引用该泛型类型自身,表达同类值之间的操作。

怎么用描述返回相同具体类型的 Add 等操作。

旧版做法调整约束结构,避免在参数列表中引用自身。

注意事项这里只声明 Add 操作的关系;泛型本身不会生成该方法。

官方依据 ↗ · 最低版本 1.26 · 核对于 2026-10-06

运行示例保存为 main.go,在 go.mod 声明 go 1.26 或以上的项目中执行 go run .

Go 1.26 · main.go
package main
import "fmt"
type Adder[A Adder[A]] interface { Add(A) A }
type Number int
func (n Number) Add(other Number) Number { return n + other }
func Combine[A Adder[A]](left, right A) A { return left.Add(right) }
func main() { fmt.Println(Combine(Number(2), Number(3))) }
运行结果
5
03标准库

errors.AsType

泛型 AsType 返回匹配类型的错误和是否找到,省去传入目标指针的写法。

怎么用提取被包装的具体错误类型。

旧版做法声明目标变量,调用 errors.As(err, &target)。

注意事项仍遍历错误树;目标类型应是错误类型或接口,并检查布尔结果。

官方依据 ↗ · 最低版本 1.26 · 核对于 2026-10-06

运行示例保存为 main.go,在 go.mod 声明 go 1.26 或以上的项目中执行 go run .

Go 1.26 · main.go
package main
import ("errors"; "fmt"; "os")
func main() {
    err := fmt.Errorf("load: %w", &os.PathError{Op:"open", Path:"note.txt", Err:os.ErrNotExist})
    value, ok := errors.AsType[*os.PathError](err)
    if ok { fmt.Println(value.Op, value.Path) }
}
运行结果
open note.txt

FROM THE SOURCE

官方完整变更目录 63

What’s New ↗

自动同步官方目录,涵盖语言、标准库、弃用及迁移变化。标题保留官方原文;中文解读精选于上方。

展开 Go 1.26 的全部变更 +
YOUR TURN

动手练习

用 new 表达式创建一个 bool 指针,并打印它的值。

提示:new(true) 保存 true,而 new(bool) 保存零值 false。

展开参考答案
Go 1.26 · main.go
package main
import "fmt"
func main() { enabled := new(true); fmt.Println(*enabled) }
运行结果
true