2
2
3
3
** 维护版本:**
4
4
5
+ - go1.24,首次发布:2025-02-11,最后更新:go1.24.0 (2025-02-11)
5
6
- go1.23,首次发布:2024-08-13,最后更新:go1.23.4 (2024-12-03)
6
- - go1.22,首次发布:2024-02-08,最后更新:go1.22.6 (2024-08-06)
7
7
8
8
Go 语言官方更新日志:[ Release History - The Go Programming Language] ( https://go.dev/doc/devel/release )
9
9
@@ -19,6 +19,78 @@ Go2.0 上一次提出草案是在 2018 年 11 月 19 日,那时还是处于 go
19
19
20
20
:::
21
21
22
+ ## 1.24
23
+
24
+ 首次发布:2025-02-11
25
+
26
+ 最后更新:go1.24.0 (2025-02-11)
27
+
28
+ go1.24 版本的详细更新日志可以前往[ Go 1.24 Release Notes] ( https://go.dev/doc/go1.24 )
29
+ 查看,在其维护期间发布的所有补丁版本可以前往[ Go1.24 - Release Patch] ( https://go.dev/doc/devel/release#go1.24.0 ) 了解。
30
+
31
+ ** 语言层面**
32
+
33
+ 1 . 泛型类型别名,允许为泛型类型创建别名,这在引用第三方定义的泛型类型时非常有用,例如
34
+
35
+ ``` go
36
+ import (
37
+ " other"
38
+ )
39
+
40
+ type MyQuque [T any] = other.Queue [T]
41
+ ```
42
+
43
+ ** 标准库**
44
+
45
+ 1 . 新增 ` weak ` 包:提供弱指针(Weak Pointers),允许对象在不增加引用计数的情况下被引用,避免缓存导致的内存泄漏,使用前需检查指针是否为
46
+ ` nil `
47
+ 2 . 文件系统访问限制:引入 ` os.Root ` 类型,限制文件操作在特定目录内,增强安全性
48
+ 3 . 加密与哈希支持:新增 ` crypto/mlkem ` ,` crypto/hkdf ` 、` crypto/pbkdf2 ` 和 ` crypto/sha3 ` 包,优化现有加密算法性能
49
+ 4 . 新增基准测试函数 ` testing.B.Loop ` ,以更好的进行循环测试
50
+ 5 . ` encoding/json ` :新增 ` omitzero ` 标签,支持基于 ` IsZero() ` 方法的零值过滤
51
+ 6 . ` strings ` 和 ` bytes ` :新增迭代器函数(如 ` Lines ` 、` SplitSeq ` 、` FieldsSeq ` )
52
+
53
+ ** 运行时**
54
+
55
+ 1 . 基于Swiss Tables重构内置map,大型map访问速度提升30%,迭代速度提升10%-60%
56
+ 2 . ` sync.Map ` 改用并发哈希 Trie(hash-trie)以优化性能,尤其是在并发写的情况
57
+ 3 . 运行时内部的互斥锁采用新的spinbit实现,降低了锁竞争,提升高并发场景性能
58
+ 4 . 优化小对象分配策略,减少内存碎片和GC暂停时间
59
+ 5 . 新增 ` runtime.AddCleanup ` 替代 ` runtime.SetFinalizer ` ,支持为对象注册多个清理函数,并在独立 goroutine 中顺序执行
60
+
61
+ ** Cgo**
62
+
63
+ 1 . 支持 ` #cgo noescape ` 和 ` #cgo nocallback ` 注解,分别声明 C 函数不逃逸内存和不回调 Go 函数,提升运行时性能
64
+ 2 . Cgo 现在将拒绝编译对具有多个不兼容声明的 C 函数的调用,严格检测跨文件的不兼容 C 函数声明(如 ` void f(int) ` 和
65
+ ` void f(double) ` ),避免生成错误调用序列
66
+
67
+ ** 工具链**
68
+
69
+ 1 . 模块工具依赖管理:通过 go.mod 的 tool 指令跟踪工具依赖,替代传统的 tools.go 空导入方案
70
+ 2 . 结构化输出:go build 和 go test 支持 -json 标志,输出 JSON 格式的构建和测试结果
71
+ 3 . 编译与链接优化:编译器生成代码效率提升,链接器默认生成 GNU Build ID(ELF 平台)和 UUID(macOS)
72
+ 4 . 禁止通过别名绕过对 CGO 生成类型的方法定义限制
73
+ 5 . ` go build ` 自动嵌入版本控制系统信息到二进制文件(支持 ` -buildvcs=false ` 禁用)
74
+ 6 . ` GOAUTH ` 环境变量支持私有模块认证。
75
+ 7 . ` go.mod ` 支持 ` tool ` 指令管理可执行依赖,替代 ` tools.go ` 空白导入
76
+ 8 . 新增 ` go get -tool ` 参数 和 ` go install tool ` 命令管理模块工具依赖
77
+ 9 . 构建缓存支持 ` go run ` 和 ` go tool ` 的二进制缓存
78
+ 10 . ` objdump ` 支持 LoongArch、RISC-V、S390X 反汇编
79
+ 11 . ` vet ` 新增 ` tests ` 分析器(检测测试函数签名错误)
80
+
81
+ ** 平台兼容性**
82
+
83
+ 1 . macOS:Go 1.24 为最后一个支持 macOS 11 Big Sur 的版本,Go 1.25 将要求 macOS 12+
84
+ 2 . Windows:将 32 位 ARM 架构标记为不完整的(GOOS=windows
85
+ GOARCH=arm),见 [ issue #70705 ] ( https://golang.google.cn/issue/70705 )
86
+ 3 . Linux:最低内核版本要求升级至 3.2
87
+ 4 . 要求 Go 1.22.6+ 作为引导工具链
88
+
89
+ ** 废弃**
90
+
91
+ 1 . ` math/rand.Seed() ` 彻底失效,需通过 ` GODEBUG=randseednop=0 ` 恢复旧行为。
92
+ 2 . ` runtime.GOROOT() ` 标记为弃用,推荐通过` go env GOROOT ` 获取路径
93
+
22
94
## 1.23
23
95
24
96
首次发布:2024-08-13
@@ -42,14 +114,14 @@ go1.23 版本的详细更新日志可以前往[Go 1.23 Release Notes](https://go
42
114
return
43
115
}
44
116
}
45
-
117
+
46
118
func main () {
47
119
sl := []string {" hello" , " world" , " golang" }
48
120
for i , s := range Upper (sl) {
49
121
fmt.Printf (" %d : %s \n " , i, s)
50
122
}
51
123
}
52
-
124
+
53
125
// 0 : HELLO
54
126
// 1 : WORLD
55
127
// 2 : GOLANG
@@ -84,7 +156,7 @@ go1.23 版本的详细更新日志可以前往[Go 1.23 Release Notes](https://go
84
156
``` go
85
157
// go:linkname gcinit runtime.gcinit
86
158
func gcinit ()
87
-
159
+
88
160
func main() {
89
161
gcinit ()
90
162
}
@@ -527,7 +599,7 @@ go1.5 版本的详细更新日志可以前往[Go 1.5 Release Notes](https://go.d
527
599
Point {-25.352594 , 131.034361 }: " Uluru" ,
528
600
Point {37.422455 , -122.084306 }: " Googleplex" ,
529
601
}
530
-
602
+
531
603
// 省略类型
532
604
m := map [Point]string {
533
605
{29.935523 , 52.891566 }: " Persepolis" ,
@@ -570,7 +642,7 @@ go1.4 版本的详细更新日志可以前往[Go 1.4 Release Notes](https://go.d
570
642
type T int
571
643
func (T ) M () {}
572
644
var x **T
573
-
645
+
574
646
// 不被允许
575
647
x.M ()
576
648
```
0 commit comments