Go 1.24 交互式游览

主要观点:Go 1.24 发布,是探索新特性的好时机,官方发布说明较枯燥,作者准备了带示例的交互式版本。介绍了 16 个新特性及相关提案和提交,包括通用类型别名、弱指针、改进的终结器、瑞士表、并发哈希 trie 映射、目录范围的文件系统访问、基准测试循环、用于测试的合成时间、测试上下文和工作目录、丢弃日志输出、追加器接口、更多字符串和字节迭代器、SHA-3 等、HTTP 协议、在 JSON 中省略零值、随机文本、工具依赖、构建、安装和测试的 JSON 输出、主模块版本等。
关键信息

  • 通用类型别名:类型别名可参数化,Go 1.24 支持,可通过设置GOEXPERIMENT=noaliastypeparams禁用。
  • 弱指针:类似普通指针但不能保持对象存活,可用于实现大对象缓存等,weak.Pointerruntime.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.Runsynctest.Wait方便测试超时等情况。
  • 测试上下文和工作目录:T.ContextB.Context可用于测试中管理上下文和资源清理,T.ChdirB.Chdir可更改工作目录。
  • 丢弃日志输出:可使用slog.DiscardHandler创建静默日志记录器。
  • 追加器接口:encoding.TextAppenderencoding.BinaryAppender可直接将对象的文本或二进制表示追加到字节切片。
  • 更多字符串和字节迭代器:stringsbytes包新增多个迭代函数。
  • SHA-3 等:crypto/sha3包实现 SHA-3 等加密函数,还有crypto/hkdfcrypto/pbkdf2包。
  • HTTP 协议:net/http包的Server.ProtocolsTransport.Protocols可配置服务器和客户端使用的 HTTP 协议。
  • 在 JSON 中省略零值:omitzero选项可在 JSON 编组时省略零值。
  • 随机文本:crypto/rand.Text函数生成加密随机字符串。
  • 工具依赖:Go 模块可通过tool指令跟踪可执行依赖。
  • 构建、安装和测试的 JSON 输出:go build等命令可接受-json标志以 JSON 格式输出构建和测试结果。
  • 主模块版本:go build命令可根据版本控制系统设置主模块版本。
    重要细节:各特性的使用示例及相关提案和提交的链接,如通用类型别名的46477,弱指针的67552628455等。各特性的性能优化数据及在不同场景下的应用注意事项等。
阅读 7
0 条评论