# golang 多版本环境控制

# 前言

新老项目很多,但是不同项目有不同的 go 版本,在同一个环境管理 go 相当麻烦,后面看文档发现了别人推荐的版本控制工具,基本无感管理 go 版本

# smart-go-dl

Go 多版本管理辅助工具,可以快速安装 Go (次要版本) 的最新版本,并对过期版本进行清理。

项目地址: https://github.com/fsgo/smart-go-dl

# 安装

有 go 环境 使用 go install 安装

go install github.com/fsgo/smart-go-dl@latest

无 go 环境 直接下载二进制文件运行

https://github.com/fsgo/smart-go-dl/releases

# 配置环境变量

export GOBIN=$HOME/go/bin   # go install 安装的二进制文件所在目录,go1.x 命令也将安装到此目录
export PATH=$GOBIN:$PATH    # 可以直接在任意位置使用 GOBIN 目录下的所有命令

# 安装不同的 go 版本

smart-go-dl install go1.22.5

# bin-auto-switcher

Go 自动切换 go 的版本

项目地址: https://github.com/fsgo/bin-auto-switcher

# 安装

go install github.com/fsgo/bin-auto-switcher/bas@latest

# 配置

让 bas 替换 go

cd ~/go/bin/
# 备份 
mv go go_backup
# 替换 go
ln -s bas go

新增配置 ~/.config/bas/go.toml

[[Rules]]
Cmd = "go.latest"          # 默认执行命令 (必填) 如果命令不存在不报错
[Rules.Spec]
GoVersionFile = "go.mod"  #判断 go 版本的文件
GoWork = "auto"
# 单独指定哪个目录使用的 go 版本
[[Rules]]
Dir = ["~/workspace/fsgo/myserver"]
Cmd = "go1.19"

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

# 演示

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

ddns-go go 版本是 go1.20

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

image-20250228191747816

image-20250228191902509

-->