Files
blog/docs/dev/language/golang/changelog.md
2025-07-01 08:15:44 +08:00

5.4 KiB
Raw Blame History

Golang 版本变化

Release History

持续更新golang版本更新变化内容只记录了一些值得关注的内容内容做了很大的精简仅做知识索引。 (本文是从1.22才开始记录的,老的版本记录得比较随意)

如果你对某一点有兴趣,推荐去官网查看详细内容。

某些变更知道后还是挺有用的,例如我之前遇到过一个随机数的问题,本地没问题,线上总是生成一样的随机数, 排查了一段时间才知道是因为没有设置随机数种子我本地用的是go1.20线上是go1.19在1.20版本时,会自动生成一个随机数种子。

1.24

Go 1.24 Release Notes

  • 🔥 要求Linux内核3.2+ 不再支持Linux内核2.6.32
  • 🔥 macOS支持变更 最后支持macOS 11 Big Sur的版本1.25将要求macOS 12+
  • 💥 完全支持泛型类型别名 类型别名现在可以像定义类型一样进行参数化
  • 💥 移除SHA-1证书签名支持 crypto/x509不再支持SHA-1签名验证
  • 💥 RSA密钥最小长度要求1024位 小于1024位的RSA密钥将返回错误
  • 新增os.Root类型 提供目录限制的文件系统访问
  • 新增testing.B.Loop方法 更快且不易出错的基准测试迭代方法
  • 新增runtime.AddCleanup函数 比SetFinalizer更灵活高效的终结器机制
  • 新增weak包 提供弱指针支持
  • 新增crypto/mlkem包 实现ML-KEM-768和ML-KEM-1024后量子密钥交换
  • 新增crypto/hkdfcrypto/pbkdf2crypto/sha3包 从golang.org/x/crypto迁移
  • 新增实验性testing/synctest包 支持并发代码测试
  • JSON支持omitzero标签 比omitempty更清晰地省略零值
  • 运行时性能提升2-3% 包括基于Swiss Tables的新map实现、更高效的小对象内存分配等

1.23

Go 1.23 Release Notes

  • 💥 for range支持迭代器函数 支持func(func() bool)func(func(K) bool)func(func(K, V) bool)类型的迭代器
  • 💥 Timer和Ticker的重大变化
    • 未引用的Timer/Ticker可立即被垃圾回收即使未调用Stop方法
    • timer channel变为无缓冲容量0保证Reset/Stop调用后不会收到过期值
  • 新增iter包 提供用户定义迭代器的基本定义
  • 新增unique包 提供值规范化功能(类似"interning"或"hash-consing"
  • 新增structs包 提供修改结构体属性的类型,如HostLayout标记符合主机平台期望的结构体布局
  • slices包新增多个迭代器相关函数 如AllValuesBackwardCollectSortedChunk
  • maps包新增多个迭代器相关函数 如AllKeysValuesInsertCollect

1.22

Go 1.22 Release Notes

  • 💥 for range不再是共享变量 这个变更可能会导致一些代码的行为发生变化
  • 💥 支持for i:=range 10循环计数
  • 新增math/rand/v2包 标准库的第一个v2版本包
  • http.ServeMux路由增强

1.21

Go 1.21 Release Notes

  • 🔥 不再支持Windows 7
  • 💥 builtin包新增minmaxclear函数
  • 💥 支持WASIWebAssembly System Interface
  • 💥 PGO默认开启
  • 💥 GO团队对兼容性的承诺 GODEBUG
  • 新增log/slog包、slicesmapscmp
  • context包新增WithoutCancel、WithDeadlineCause、WithTimeoutCause函数

1.20

Go 1.20 Release Notes

  • 💥 引入PGOProfile-guided optimization
  • slice可以直接转为数组 不再需要先转化为指针了
  • 优化unsafe包的切片/字符串操作
  • context包新增WithCancelCause函数 可以传递取消原因
  • 新增arena包、math/rand自动全局随机数

1.19

Go 1.19 Release Notes

  • 💥 新的内存模型
  • 软内存限制(soft memory limit)
  • atomic添加多个新函数
  • 新的编译约束//go:build unix

1.18

  • 💥 泛型支持
  • 💥 模糊测试(Fuzzing)
  • 💥 工作区模式
  • append切片扩容策略变更
  • 新增net/netip包、新增strings/bytes.Cut函数、sync包新增TryLock方法

1.17

  • 新增//go:build指令
  • go.mod支持Deprecated指令
  • 允许切片转化为数组
  • Go Module优化

1.16

  • 💥 原生支持Mac M1
  • 💥 Go module转正
    • go build/run 不再自动更新go.mod和go.sum
    • 添加retract指示符 可以废弃模块
  • 💥 新增embed包 支持嵌入二进制文件
  • 新增runtime/metrics包、io/fs

1.15

  • 🔥 不再支持darwin32位系统
  • 加入新的linker工具
  • 增加time/tzdata包,
  • panic展现形式调整

1.14

  • 💥 支持异步抢占式调度 runtime.GOMAXPROCS(1)也不会阻塞了
  • 优化defer性能

1.13

  • 💥 Go module成为默认的依赖管理工具
    • GOPROXY有默认初值并支持设置成多个代理的列表
    • GOPRIVATE私有化模块
  • 💥 错误处理的改进,增加了errors.Iserrors.Aserrors.Unwarp等函数和支持fmt.Errorf%w
  • 💥 支持数字字面量改进,引入二进制字面量,以及_作为数字分隔符
  • go.mod文件中引入go指令指定编译该模块所需的Go版本