主要观点:Go 1.24 发布,是探索新特性的好时机,官方发布说明较枯燥,作者准备了带示例的交互式版本。介绍了 16 个新特性及相关提案和提交,包括通用类型别名、弱指针、改进的终结器、瑞士表、并发哈希 trie 映射、目录范围的文件系统访问、基准测试循环、用于测试的合成时间、测试上下文和工作目录、丢弃日志输出、追加器接口、更多字符串和字节迭代器、SHA-3 等、HTTP 协议、在 JSON 中省略零值、随机文本、工具依赖、构建、安装和测试的 JSON 输出、主模块版本等。
关键信息:
- 通用类型别名:类型别名可参数化,Go 1.24 支持,可通过设置
GOEXPERIMENT=noaliastypeparams
禁用。 - 弱指针:类似普通指针但不能保持对象存活,可用于实现大对象缓存等,
weak.Pointer
和runtime.AddCleanup
可配合使用。 - 改进的终结器:
runtime.AddCleanup
替代runtime.SetFinalizer
,更易使用,可用于实现资源清理。 - 瑞士表:Go 1.24 改变
map
实现为基于 SwissTable,在多种场景下性能优化。 - 并发哈希 trie 映射:
sync.Map
实现改为并发哈希 trie,性能提升,尤其在映射修改时。 - 目录范围的文件系统访问:
os.Root
类型限制文件系统操作到特定目录,OpenRoot
等方法可操作目录内文件。 - 基准测试循环:
testing.B.Loop
替代传统for range b.N
循环,解决一些基准测试问题。 - 用于测试的合成时间:
testing/synctest
包可在测试中使用合成时间,synctest.Run
和synctest.Wait
方便测试超时等情况。 - 测试上下文和工作目录:
T.Context
和B.Context
可用于测试中管理上下文和资源清理,T.Chdir
和B.Chdir
可更改工作目录。 - 丢弃日志输出:可使用
slog.DiscardHandler
创建静默日志记录器。 - 追加器接口:
encoding.TextAppender
和encoding.BinaryAppender
可直接将对象的文本或二进制表示追加到字节切片。 - 更多字符串和字节迭代器:
strings
和bytes
包新增多个迭代函数。 - SHA-3 等:
crypto/sha3
包实现 SHA-3 等加密函数,还有crypto/hkdf
和crypto/pbkdf2
包。 - HTTP 协议:
net/http
包的Server.Protocols
和Transport.Protocols
可配置服务器和客户端使用的 HTTP 协议。 - 在 JSON 中省略零值:
omitzero
选项可在 JSON 编组时省略零值。 - 随机文本:
crypto/rand.Text
函数生成加密随机字符串。 - 工具依赖:Go 模块可通过
tool
指令跟踪可执行依赖。 - 构建、安装和测试的 JSON 输出:
go build
等命令可接受-json
标志以 JSON 格式输出构建和测试结果。 - 主模块版本:
go build
命令可根据版本控制系统设置主模块版本。
重要细节:各特性的使用示例及相关提案和提交的链接,如通用类型别名的46477,弱指针的67552和628455等。各特性的性能优化数据及在不同场景下的应用注意事项等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。