各位大佬们怎么进行 golang 项目的多版本控制?
新老项目很多,怎么进行 golang 的版本控制?
这边推荐两个库(非推广)
golang 多版本 下载删除 管理
github.com/fsgo/smart-go-dl
自动切换 go 执行的二进制文件
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 之后,除了牺牲执行时的一些性能损耗,用起来非常丝滑,代码提示和代码跳转都没有问题,都能自动切到对应的版本。
最后,俺的博客 blog.twelveeee.top/2025/Go/go_version_control/ 记录了这两个项目的用法(虽然这两个项目的 readme 都很完整)(涨涨 pv 谢谢!)
go.mod 里面添加一行 toolchain go1.24.0 不就能自动切换了吗?
没听懂,你是在用 go1.20 的编译器,引用 1.21 目录里的标准库 maps 来编译吗?你这么做的目的是啥?
我个人:
- 本地 go 用最新
- 很少用新版新特性
如果需要测试,命令行走起, go.dev/doc/manage-install
那我这半年吃过的苦算什么 TAT
主要是 golang 版本和项目的版本不对的话,vscode 会报错并且没有代码提示和跳转
正常运行命令 go1.21 run main.go 还是能运行的,开发起来比较痛苦。
管理 本地工具链吗?, asdf 啊
啊? java 的裹脚布传统也要带过来吗
go 版本难道不是有新的就升?哦,字节跳动除外。
有这个必要吗?部署都是用 docker ,要用什么版本 dockerfile 里面指定就行了,啥时候打不出包了就看看日志换个 build image
vscode 指定 "GOROOT": "\[email protected]"
用 asdf 吧,自己多去研究下
用 mise ,更快版本的 asdf
我用的 gvm 。不过一般本地用最新的
update-alternative??
go 兼容性那么好,不用新的傻吗,赶紧升级 1.24map 性能有优化
有些要支持 win7 或 2008 ,不得不 1.20 吧
用 go1.20 的,添加这句不行吧
go1.21 新增的功能,需要本机安装的版本在 1.21 或以上才能识别这个指令,代表本模块所需使用的工具链
也可以用 GOTOOLCHAIN=go1.18 go run . 强行指定编译使用的版本
详情可见: go.dev/blog/toolchain
go 这种升个版本和喝水一样的东西对多版本管理要求倒也没那么大。我们公司 go 有的项目最新版的大版本一出本地和开发测试环境就原地升到最新版,然后过个半年左右生产环境也升到最新版。小版本基本上是公布后有人注意到生产环境就顺便升了
👀又不是 java ,golang 随便升啊
感谢各位大佬,学到了!
至于为什么不升级 go 的版本,有些项目不是我们团队负责的,我就上去加一两行代码。
升级完了 golang 版本还要去改 makefile ,还要担心上线出了问题,所以还是保留原状,不升的好。
没记错,golang 是高版本向下兼容的,而且编译方式都是静态编译,相当于基本上所有依赖都是有源码。直接升工具链没啥问题吧
好主意。回头我实现一下我写的 GVM 工具。加个 switch
造轮子的时候就要降版本号了
或者说大家是怎么使用 AI 的?我遇到一些不太懂的概念,问问 ai,通常 ai 回答的都比较明了,大家是如何使用 ai 的? 写代码时摸鱼时间不够的问题 不常用的 api …
1.盘位 4 个左右,必须有单独的 ssd 盘位安装 window 系统,对,你没看错,就是 win 系统。 2.外观小巧紧凑(类似群晖,再不行威联通的外观也行)别太大的像台式…
目前多多刚入手一台四盘位的 n100 ,已购入一个 16t 的西数二手企业盘,一个全新 4t 海康垂直盘 nas 自带 16g+512g 目前比较纠结安装什么系统。 用途就是放…