如果需要,Go 会自动下载一个更新的工具链 —— kokada

作者使用elliotchance/orderedmap作为有序映射的选择,因 Go 标准库暂未包含。最近做了PR实现 Go 1.23 迭代器,但在生成博客的代码中避免使用,因为 Go 1.23 刚发布且不是nixpkgs中的默认 Go。
决定创建分支搁置数月,尝试在本地运行代码时,go build会下载 Go 1.23.0,编译后的二进制运行正常。Go 1.21 起,Go 发行版包含go命令和捆绑的 Go 工具链,go命令可使用捆绑的或本地路径中的工具链。若gotoolchaingo.mod设置的 Go 版本高于当前go二进制,Go 会下载工具链(需go二进制至少为 1.21),可通过GOTOOLCHAIN环境设置强制特定工具链,默认值为auto,还可设置为local使用当前go二进制或之前的行为,有<name>+autopath等选项,下载的工具链位于GOPATH下的golang.org/toolchain模块中,如golang.org/toolchain@v0.0.1-go1.23.0.darwin-arm64。Go 工具链二进制是静态的,所以此方法可行。虽不喜欢程序从互联网下载随机二进制,但认为 Go 这样做使 Go 项目的整个引导过程更简单,只要PATH中有合理的最新go二进制即可,且 Go 模块已较安全,只要没人在golang.org/toolchain命名空间发布模块,就不存在太多安全问题,但作者不是安全专家。若不喜欢此行为,可通过设置GOTOOLCHAIN=local禁用,且不要在CI中忘记设置,除非不在乎 Go 版本。

阅读 13
0 条评论