各位大佬们怎么进行 golang 项目的多版本控制?

2025 年 2 月 28 日
 Twelveeee

新老项目很多,怎么进行 golang 的版本控制?

这边推荐两个库(非推广)

golang 多版本 下载删除 管理 https://github.com/fsgo/smart-go-dl

自动切换 go 执行的二进制文件 https://github.com/fsgo/bin-auto-switcher

效果如图

bin-auto-switch go 版本是 go1.22

ddns-go go 版本是 go1.20

直接运行 go 命令就能直接使用

除此之外,vscode goroot 的配置我感觉是有问题的,哪怕我配置了 go.root 为 1.21 的目录 ,只要我默认的版本是 go1.20 ,那么我的 maps 就一直会报错(maps 为 go1.21 新增)

bin-auto-switch 本质是替换了 go 的命令,然后通过读取各种配置,比如 go.mod 去判断应该执行的 go 的版本

自从用了 bin-auto-switch 之后,除了牺牲执行时的一些性能损耗,用起来非常丝滑,代码提示和代码跳转都没有问题,都能自动切到对应的版本。

最后,俺的博客 https://blog.twelveeee.top/2025/Go/go_version_control/ 记录了这两个项目的用法(虽然这两个项目的 readme 都很完整)(涨涨 pv 谢谢!)

3942 次点击
所在节点    Go 编程语言
24 条回复
mengyx
2025 年 2 月 28 日
go.mod 里面添加一行 toolchain go1.24.0 不就能自动切换了吗?
strobber16
2025 年 2 月 28 日
没听懂,你是在用 go1.20 的编译器,引用 1.21 目录里的标准库 maps 来编译吗?你这么做的目的是啥?
lesismal
2025 年 2 月 28 日
我个人:

1. 本地 go 用最新
2. 很少用新版新特性
3. 如果需要测试,命令行走起,https://go.dev/doc/manage-install
Twelveeee
2025 年 2 月 28 日
@mengyx 那我这半年吃过的苦算什么 TAT
Twelveeee
2025 年 2 月 28 日
@strobber16 @lesismal

主要是 golang 版本和项目的版本不对的话,vscode 会报错并且没有代码提示和跳转

正常运行命令 go1.21 run main.go 还是能运行的,开发起来比较痛苦。
thevita
2025 年 2 月 28 日
管理 本地工具链吗?, asdf 啊
povsister
2025 年 2 月 28 日
啊? java 的裹脚布传统也要带过来吗

go 版本难道不是有新的就升?哦,字节跳动除外。
stormtrooperx5
2025 年 2 月 28 日
有这个必要吗?部署都是用 docker ,要用什么版本 dockerfile 里面指定就行了,啥时候打不出包了就看看日志换个 build image
dong568789
2025 年 2 月 28 日
vscode 指定 "GOROOT": "\\toolchain@v0.0.1-go1.22.7.windows-amd64"
headwindx
2025 年 3 月 1 日
用 asdf 吧,自己多去研究下
inhzus
2025 年 3 月 1 日
用 mise ,更快版本的 asdf
Maboroshii
2025 年 3 月 1 日
我用的 gvm 。不过一般本地用最新的
RobinHuuu
2025 年 3 月 1 日
update-alternative??
sardina
2025 年 3 月 1 日
go 兼容性那么好,不用新的傻吗,赶紧升级 1.24map 性能有优化
zachli
2025 年 3 月 1 日
有些要支持 win7 或 2008 ,不得不 1.20 吧
zachli
2025 年 3 月 1 日
@mengyx 用 go1.20 的,添加这句不行吧
mengyx
2025 年 3 月 1 日
@zachli go1.21 新增的功能,需要本机安装的版本在 1.21 或以上才能识别这个指令,代表本模块所需使用的工具链

也可以用 GOTOOLCHAIN=go1.18 go run . 强行指定编译使用的版本

详情可见: https://go.dev/blog/toolchain
BeautifulSoap
2025 年 3 月 1 日
go 这种升个版本和喝水一样的东西对多版本管理要求倒也没那么大。我们公司 go 有的项目最新版的大版本一出本地和开发测试环境就原地升到最新版,然后过个半年左右生产环境也升到最新版。小版本基本上是公布后有人注意到生产环境就顺便升了
0x676e67
2025 年 3 月 1 日
👀又不是 java ,golang 随便升啊
Twelveeee
2025 年 3 月 1 日
感谢各位大佬,学到了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1114965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX