- 泛型 Generics 引入了对使用参数化类型的泛型代码的新支持, 达到了算法可复用的目的
- 模糊测试 Fuzzing 提供了一种自动化测试的选择
- Workspaces 解决 go mod 遗留下来的本地多模块开发依赖问题
- CPU 性能提升 20%,
- 支持了泛型,对比 1.17 编译时间可能会慢 15%~18%
- 文档注释支持链接、列表和更简洁的标题语法
- 类型别名 Type Alias
- flag 包增加 TextVar 函数
- 安全并发 sync.Map 将读写分离的方式实现了某些特定场景下的性能提升
- 增加 unix 构建标签统一标识类 *nix 系统
- Go 的内存模型现在改进了sync/atomic 包的功能。sync/atomic 包现在与 Java、Swift 和 Rust 等语言使用的内存模型一致
- os/exec 包不再接受 PATH 查找中的相对路径以加强额外的安全
- 新的垃圾收集器可以通过设置 GOGC,指示 Go 开始下一个垃圾回收周期,具体取决于分配了多少新内存与仍有多少旧内存可用
- 允许从切片到数组的转换
- comparable “放宽”了对泛型实参的限制
- unsafe 包定义了三个新函数 SliceData、String 和 StringData
- 允许在泛型函数/方法中进行类型声明
- 支持 wrap multiple errors
- time 包新增 DateTime、DateOnly 和 TimeOnly 三个 layout 格式常量
- 新增 arena 包
- 新 crypto/ecdh 包明确支持 NIST 曲线和 Curve25519 上的椭圆曲线 Diffie-Hellman 密钥交换
- 返回一个包含错误列表的错误,如果错误类型实现了该方法 errors.Join,则可以再次获取错误列表
- 新 http.ResponseController类型提供对接口未处理的扩展的按请求功能的 http.ResponseWriter 访问
- httputil.ReverseProxy 转发代理包括一个新的钩子 Rewrite 函数,取代了以前的 Director 钩子
- 新 context.WithCancelCause 函数提供了一种方法来取消具有给定错误的上下文。可以通过调用新 context.Cause函数来检索该错误
- 新 os/exec.Cmd 字段 Cancel 并 WaitDelay 指定 Cmd 其关联 Context 被取消或进程退出时的行为
- cover 工具现在可以收集整个程序的覆盖率概况,而不仅仅是单元测试
- go 工具不再依赖于 $GOROOT/pkg 目录中预编译的标准库包存档,并且它们不再随发行版一起提供
- go test -json已得到改进,以使其在出现杂散写入时更加健壮stdout
- build 和 go install 其他与构建相关的命令现在接受一个 -pgo(profile-guided optimization) 启用配置文件引导优化的标志以及一个 -cover 用于整个程序覆盖率分析的标志
- go 命令现在默认在没有 C 工具链的系统上禁用cgo
- vet 工具报告了在并行运行的测试中可能发生的更多循环变量引用错误
- 让 Go 编译器的编译速度重新回归到了 Go 1.17 的水准!相对 Go 1.19 提升 10% 左右
- min、max 和 clear
- 明确了包初始化顺序算法
- 对泛型的类型推断能力做了增强
- Go 编译器会将 panic(nil) 替换为 panic(new(runtime.PanicNilError))
- 一个循环语句定义一次的变量(loop var per loop)
- PGO(profile-guided optimization) 默认开启
- 大幅降低 GC 尾部延迟
- 支持 WASI(WebAssembly System Interface)
- log/slog
- slices、maps 和 cmp
- 增加 errors.ErrUnsupported
- 增加 BoolFunc函数
- 在 linux 上支持多路径 TCP
- ValueOf 不再强制 Value 内容在堆上分配,而是允许在栈上分配 Value 的内容
- 增加 OnceFunc、OnceValue 和 OnceValues 等语法糖函数
- 新增 Testing 函数判断是否由 go test 运行的
- 增加 QUICConn 以支持后续的 QUIC 实现
- 新增 WithoutCancel、WithDeadlineCause、WithTimeoutCause 和 AfterFunc
- 收集跟踪信息成本大幅降低
- 升级到 Unicode 15.0.0 版本
- 试验特性 loop-var 转正落地
- for range 新增了对整型表达式的支持
- 基于 PGO(profile-guided optimization) 的构建可以比以前版本实现更高比例的调用去虚拟化(devirtualize)
- go work 支持 vendor
- go mod init 不再 care 其他 vendor 工具的配置文件
- 改进 go test -cover 的输出
- math/rand/v2
- 增强 http.ServeMux 表达能力