go1.18 (released 2022-03-15) ############################ 按惯例应该在 2 月份发布,Delay 了一个多月 泛型 ==== 千呼万唤,伴随争议终于到来 Type Parameters Proposal Go Blog 提到 It isn’t a stretch to say that the design for parts of Go 1.18 started over a decade ago when we first released Go., 指的可能就是 2009 年 rsc 在博客里探讨泛型如何设计 好奇为啥用 [] 而不是其他语言普遍采用的 <> `Rob Pike 的担忧 `_ , 建议先不要用泛型,改动 Go 1.18 中的标准库 模糊测试Fuzzing =============== Go is the first major language with fuzzing fully integrated into its standard toolchain Go Fuzzing 作为代价,fuzzing 会消耗大量内存,影响机器性能,占用也许是几个 G 的存储空间 `Rob Pike 对 fuzzing 的疑虑 `_ Workspaces 工作区 ================= 在 2021 年用户调查中,反馈最多的挑战是跨多个模块工作。 在 Go 1.18 中,使用新的 Go 工作区模式解决了这个问题,使用多个模块将变得简单。 如在工作目录或父目录中有 go.work 文件,或使用 GOWORK 环境变量进行指定,将使 go 命令进入工作区模式。 在此模式下,go.work 文件将被用来确定作为模块解析根的一组主模块,而不是使用通常找到的 go.mod 文件来指定单一的主模块。 20% 的性能提升 ============== Go 1.18 将为 ARM64 架构带来高达 20% 的 CPU 性能改进 但由于编译器中与支持泛型有关的变化,Go 1.18 的编译速度可能比 Go 1.17 的编译速度大约慢 15%。编译后的代码的执行时间不受影响。打算在 Go 1.19 中提高编译器的速度。