各位大佬们怎么进行 golang 项目的多版本控制? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Twelveeee
V2EX    Go 编程语言
<1>各位大佬们怎么进行 golang 项目的多版本控制?
  •  
  •   Twelveeee
    Twelveeee 2025 年 2 月 28 日 3671 次点击
    这是一个创建于 340 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新老项目很多,怎么进行 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 命令就能直接使用

    image-20250228191747816

    image-20250228191902509

    除此之外,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 谢谢!)

    24 条回复    2025-03-01 17:10:36 +08:00
    mengyx
        1
    mengyx  
       2025 年 2 月 28 日 via iPhone   1
    go.mod 里面添加一行 toolchain go1.24.0 不就能自动切换了吗?
    strobber16
        2
    strobber16  
       2025 年 2 月 28 日
    没听懂,你是在用 go1.20 的编译器,引用 1.21 目录里的标准库 maps 来编译吗?你这么做的目的是啥?
    lesismal
        3
    lesismal  
       2025 年 2 月 28 日
    我个人:

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

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

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

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

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

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

    升级完了 golang 版本还要去改 makefile ,还要担心上线出了问题,所以还是保留原状,不升的好。
    neoblackcap
        22
    neoblackcap  
       2025 年 3 月 1 日
    没记错,golang 是高版本向下兼容的,而且编译方式都是静态编译,相当于基本上所有依赖都是有源码。直接升工具链没啥问题吧
    skiy
        23
    skiy  
       2025 年 3 月 1 日
    好主意。回头我实现一下我写的 GVM 工具。加个 switch

    ![img]( https://upload.cc/i1/2025/03/01/guMEbH.png)
    Cannian
        24
    Cannian  
       2025 年 3 月 1 日
    @povsister 造轮子的时候就要降版本号了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 118ms UTC 05:20 PVG 13:20 LAX 21:20 JFK 00:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86