V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Twelveeee

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

  •  
  •   Twelveeee ·
    Twelveeee · Feb 28, 2025 · 3942 views
    This topic created in 430 days ago, the information mentioned may be changed or developed.

    新老项目很多,怎么进行 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 replies    2025-03-01 17:10:36 +08:00
    mengyx
        1
    mengyx  
       Feb 28, 2025 via iPhone   ❤️ 1
    go.mod 里面添加一行 toolchain go1.24.0 不就能自动切换了吗?
    strobber16
        2
    strobber16  
       Feb 28, 2025
    没听懂,你是在用 go1.20 的编译器,引用 1.21 目录里的标准库 maps 来编译吗?你这么做的目的是啥?
    lesismal
        3
    lesismal  
       Feb 28, 2025
    我个人:

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

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

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

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

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

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

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

    ![img]( https://upload.cc/i1/2025/03/01/guMEbH.png)
    Cannian
        24
    Cannian  
       Mar 1, 2025
    @povsister 造轮子的时候就要降版本号了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2795 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 93ms · UTC 14:14 · PVG 22:14 · LAX 07:14 · JFK 10:14
    ♥ Do have faith in what you're doing.