作者使用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
命令可使用捆绑的或本地路径中的工具链。若go
或toolchain
行go.mod
设置的 Go 版本高于当前go
二进制,Go 会下载工具链(需go
二进制至少为 1.21),可通过GOTOOLCHAIN
环境设置强制特定工具链,默认值为auto
,还可设置为local
使用当前go
二进制或之前的行为,有<name>+auto
和path
等选项,下载的工具链位于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 版本。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。