Upgrade Golang to 1.21
日常升级.
Changes
- Major
- [x] go.mod
- [x] Dockerfile
- Minor
- [x] Use builtin
slices
,slog
- [x] Use builtin
context.WithoutCause()
- [x] Use builtin
Check
- [x] Build all apps' image
- [x] Call a RPC which used
context.WithoutCause()
About 1.21
https://tonybai.com/2023/08/20/some-changes-in-go-1-21/
分章分成四个部分:
- 语言本身
- 编译器与运行时
- 工具链
- 标准库
其中比较重要的有: loopvar, GC 优化, slog, 以及兼容性部分
Kimi
总结文章, 给出大纲以及重点, 使用 Markdown 的格式编写:
Go 1.21 版本更新概述:
- 语言变化
- builtin 包新增预定义函数:min、max 和 clear
- 明确了包初始化顺序算法
- 增强泛型的类型推断能力
- 修正 Go1 中的两个“陷阱”:panic(nil)和 for 循环变量
- Go 编译器与运行时变化
- PGO 默认开启
- 降低 GC 尾部延迟
- 支持 WASI
- Go 工具链更新
- 向后兼容:扩展和规范化 GODEBUG 的使用
- 向前兼容:go.mod 文件中的 go line 作为约束规则,引入 toolchain 指示符和 GOTOOLCHAIN 环境变量
- Go 标准库更新
- log/slog:结构化日志支持
- slices、maps 和 cmp:泛型包加入标准库
- 其他变化:errors.ErrUnsupported、flag.BoolFunc、 net 的多路径 TCP 支持、 reflect.ValueOf 优化、sync.OnceFunc 等
- 参考资料
- Go 1.21 Release Notes
- Go 1.21 版本发布博客
- 兼容性相关博客
- Godebug 手册
- LoopvarExperiment 页面
- 如何 Golang Evolves without Breaking Programs 文章
- PGO 用户指南
这个大纲总结了文章中关于 Go 1.21 版本的主要更新和变化, 包括语言特性的变更、编译器与运行时的改进、工具链的更新以及标准库的新增和改动。 同时,列出了文章末尾提供的参考资料链接,方便读者进一步阅读和了解。