Skip to content

Commit ab4b847

Browse files
committed
feat: update 1.24 release
1 parent 1167cc5 commit ab4b847

File tree

1 file changed

+78
-6
lines changed

1 file changed

+78
-6
lines changed

src/release.md

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
**维护版本:**
44

5+
- go1.24,首次发布:2025-02-11,最后更新:go1.24.0 (2025-02-11)
56
- go1.23,首次发布:2024-08-13,最后更新:go1.23.4 (2024-12-03)
6-
- go1.22,首次发布:2024-02-08,最后更新:go1.22.6 (2024-08-06)
77

88
Go 语言官方更新日志:[Release History - The Go Programming Language](https://go.dev/doc/devel/release)
99

@@ -19,6 +19,78 @@ Go2.0 上一次提出草案是在 2018 年 11 月 19 日,那时还是处于 go
1919

2020
:::
2121

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+
2294
## 1.23
2395

2496
首次发布:2024-08-13
@@ -42,14 +114,14 @@ go1.23 版本的详细更新日志可以前往[Go 1.23 Release Notes](https://go
42114
return
43115
}
44116
}
45-
117+
46118
func main() {
47119
sl := []string{"hello", "world", "golang"}
48120
for i, s := range Upper(sl) {
49121
fmt.Printf("%d : %s\n", i, s)
50122
}
51123
}
52-
124+
53125
//0 : HELLO
54126
//1 : WORLD
55127
//2 : GOLANG
@@ -84,7 +156,7 @@ go1.23 版本的详细更新日志可以前往[Go 1.23 Release Notes](https://go
84156
```go
85157
//go:linkname gcinit runtime.gcinit
86158
func gcinit()
87-
159+
88160
func main() {
89161
gcinit()
90162
}
@@ -527,7 +599,7 @@ go1.5 版本的详细更新日志可以前往[Go 1.5 Release Notes](https://go.d
527599
Point{-25.352594, 131.034361}: "Uluru",
528600
Point{37.422455, -122.084306}: "Googleplex",
529601
}
530-
602+
531603
// 省略类型
532604
m := map[Point]string{
533605
{29.935523, 52.891566}: "Persepolis",
@@ -570,7 +642,7 @@ go1.4 版本的详细更新日志可以前往[Go 1.4 Release Notes](https://go.d
570642
type T int
571643
func (T) M() {}
572644
var x **T
573-
645+
574646
// 不被允许
575647
x.M()
576648
```

0 commit comments

Comments
 (0)