Advertisement

Go 1.23.0 重磅发布,不少改进

阅读量:

今晨,Go 团队的 Dmitri Shuralyov 代表团队发布了令人期待的 Go 1.23 版本。

Go 1.23 相较于 Go 1.22 有着诸多显著的改进。

完整的发布说明 https://golang.google.cn/doc/go1.23

1. 语言变更:

  • 在"for-range"循环中, 范围表达式如今可采用迭代器函数形式, 如 func(func(K) -> bool), 这一改进使用户能够自定义任意序列的迭代行为. 同时, slices 和 maps 包增添了几项与迭代操作相关的实用功能, 并新增了一个专门用于处理遍历任务的 iter 包. 比如说, 我们可以在处理映射时, 方便地将键存入切片, 并按顺序排列其值.
    • 预览现在支持泛型类型的别名, 通过设置GOEXPERIMENT=aliastypeparams即可启用这一特性, 然而跨包边界目前仍无法使用.

2. 工具:

  • Go工具链具备遥测功能,在默认设置下会将收集到的统计信息存储于本地计数器文件中,并为用户提供上传匿名计数器报告的可能性以辅助Go团队了解工具链的应用状况。
  • go命令新增了一些标志与功能:其环境变量GOROOT_FINAL不再起作用;通过新增\-changed标志可仅列出与默认设置不同的环境变量;\-diff\)标志将统一展示必要的修改信息而不影响原始文件内容;新增-m -json)格式选项提供了更多字段;\godebug\)指令专门用于设置GODEBUG相关参数。
  • go vet\)子命令增添了新的`\stdversion)分析器功能项,在遇到引用当前版本中过新符号时可标记出来。
  • 命令行界面新增了对`-ldflags)标志的支持。
  • trace\)工具显著提升了容错能力,在面临部分跟踪中断时能够尽可能恢复更多的跟踪记录。

3. 运行时:

  • 对于未能正确处理的恐慌或其他致命错误而言,在运行时打印出回溯信息时会将错误消息的第二行及其后续行缩进以与第一个goroutine相关的堆栈跟踪清晰地区分。
  • 编译器通过Profile Guided Optimization明显减少了构建时间开销,并且能够通过重叠局部变量的堆栈帧槽来减少内存占用。值得注意的是,在386和amd64架构上,默认情况下编译器会利用PGO对齐循环中的热块。
  • 链接器已禁止在构建动态链接ELF二进制文件时使用//go:linkname指令来引用标准库中未标记为内部符号的标准库函数,并新增了选项 flags/-bindnow 以启用即时函数绑定功能。

4. 标准库:

  • 实现了新的功能模块后缀'v2'并进行了大量改进工作。
  • time.Timertime.Ticker的实现有两种显著的变化:
    • 一个方面是,在主程序所在的模块中使用Go 1.23.0或更高版本时,默认情况下这些定时器不会立即被垃圾回收。
    • 另一个方面是与这些定时器相关的通道在主程序所在的模块中使用Go 1.23.0或更高版本时,默认情况下没有缓冲且容量为零。
  • 新增了名为'unique'的新包,默认提供了规范化的值功能。
  • 新增了名为'iter'的新包,默认提供了处理用户自定义迭代器的功能。
  • 新增了一个名为'structs'的新包,默认提供了一个HostLayout类型的结构用于表示主机平台期望的布局信息。
  • 其他库也进行了少量的改进工作:
    • 包括以下一些库:
      • archive/tar
      • crypto/tls
      • crypto/x509
      • database/sql
      • debug/elf
      • encoding/binary
      • go/ast
      • go/types
      • math/rand/v2
      • net
      • net/http
      • net/http/httptest
      • net/netip
      • os
      • path/filepath
      • reflect
      • runtime/debug
      • runtime/pprof
      • runtime/trace
        等等。

全部评论 (0)

还没有任何评论哟~