go+Go Atlas版本特性图谱
官方文档 ↗
历史正式系列 · 学习与迁移参考go1.21.13

Go 1.21

常用操作进入语言与标准库

min、max、clear 减少样板,slices 提供泛型集合操作,slog 支持结构化日志。

查看发布说明 ↗
LEARN BY DOING

学习路线与升级检查

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

这一版怎么学

  • 01 · min、max 与 clear

    简化最值选择,复用缓冲区前清理旧数据。

  • 02 · slices 泛型切片工具

    处理有序数据和简单集合查询。

  • 03 · slog 结构化日志

    让请求、任务和业务实体拥有可检索的日志字段。

升级前检查

  • go.mod 的 go 指令开始作为最低工具链要求,核对 go 和 toolchain 的职责。
  • slices.Sort 会修改输入;需要保留原顺序时先 Clone。
  • 结构化日志字段避免写入敏感数据,统一字段名称便于查询。

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

THE HIGHLIGHTS

这一版,值得关注 03

01语法

min、max 与 clear

新增内置最值函数和清空映射、归零切片元素的 clear。

怎么用简化最值选择,复用缓冲区前清理旧数据。

旧版做法手写比较分支和逐项删除循环。

注意事项clear(slice) 不改变长度和容量;min / max 不是可接收 slice... 的普通变参函数。

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

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

Go 1.21 · main.go
package main
import "fmt"
func main() { values := []int{3, 8}; fmt.Println(min(3, 8), max(3, 8)); clear(values); fmt.Println(values) }
运行结果
3 8
[0 0]
02标准库

slices 泛型切片工具

slices 提供 Sort、Clone、Contains 等常见切片操作。

怎么用处理有序数据和简单集合查询。

旧版做法使用 sort 包、手写查找或自行复制切片。

注意事项Sort 修改原切片;Clone 是浅拷贝,嵌套对象仍可能共享。

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

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

Go 1.21 · main.go
package main
import ("fmt"; "slices")
func main() { values := []int{3, 1, 2}; slices.Sort(values); fmt.Println(values, slices.Contains(values, 2)) }
运行结果
[1 2 3] true
03开发体验

slog 结构化日志

log/slog 使用级别、消息和键值属性记录日志,可选择文本或 JSON Handler。

怎么用让请求、任务和业务实体拥有可检索的日志字段。

旧版做法拼接文本日志,或统一使用第三方结构化日志框架。

注意事项字段应保持类型稳定;示例为获得固定输出去掉时间属性,生产环境通常保留时间。

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

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

Go 1.21 · main.go
package main
import ("log/slog"; "os")
func main() {
    handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
        ReplaceAttr: func(groups []string, attr slog.Attr) slog.Attr {
            if attr.Key == slog.TimeKey { return slog.Attr{} }; return attr
        },
    })
    slog.New(handler).Info("ready", "workers", 2)
}
运行结果
{"level":"INFO","msg":"ready","workers":2}

FROM THE SOURCE

官方完整变更目录 64

What’s New ↗

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

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

动手练习

对切片副本排序,验证原切片仍保持 [3 1 2]。

提示:先 slices.Clone,再 slices.Sort。

展开参考答案
Go 1.21 · main.go
package main
import ("fmt"; "slices")
func main() { original := []int{3, 1, 2}; sorted := slices.Clone(original); slices.Sort(sorted); fmt.Println(original); fmt.Println(sorted) }
运行结果
[3 1 2]
[1 2 3]