有哪些开源工具可以管理Golang版本

有哪些开源工具可以管理Golang版本 在 macOS 上有切换 Go 版本的好方法吗?

如果使用 Python,我们可以定义 python2、python2.7、python3、python3.5 来使用不同的版本。但是 Go 呢?

我们知道 Go 的安装目录是 GOROOT:

$ go env GOROOT
/usr/local/go

在 macOS 上通常只安装了一个版本。是否可以在 macOS 上安装多个 Go 版本并轻松切换?

是否有用于管理 Golang 版本的开源工具?

6 回复

我需要为参与Kubernetes贡献而使用不同的Go版本。

请问哪个工具管理版本最方便?

更多关于有哪些开源工具可以管理Golang版本的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go 与 Python 不同。在 Python 中,新版本的解释器可能无法运行旧代码,破坏性的 API 变更成为常态,并且你的代码需要与机器上安装的解释器和库版本兼容。

与其寻找切换 Go 版本的工具,不如始终使用最新发布的版本(当前为 1.17.1)。

除了 @s0xzwasd 的所有建议外,还有:

  • 容器镜像中的 Go 工具链
  • 按照《管理 Go 安装 - Go 编程语言》中所述安装 Go 版本,并使用带版本号的命令名称来调用所需的版本(例如,“go1.13.1”)。

但问题是,你真的需要不同的 Go 版本吗?

对于大多数开发需求,最新的 Go 版本通常是最佳选择。得益于 Go 1 兼容性承诺,你所有旧的、更旧的和超级旧的代码都应该能与最新的编译器版本无缝协作。

我认为,任何专门的版本管理器(比如 @s0xzwasd 建议的那些)都比折腾 Docker 镜像或手动管理版本更方便。

另一方面,官方的 k8s 版本反正是在 Docker 容器内构建的,所以使用 Docker 镜像进行构建在这里似乎是一个选项。

同样值得注意的是,这份文档建议安装最新可用的 Go 版本以贡献 k8s 代码。

我并未以任何方式参与 k8s 开发,因此只能在此推测,但您可能想(或许从 k8s 社区)弄清楚,k8s 版本对应的 Go 版本列表是否仅仅是最低要求。很可能所有这些版本仍然可以使用最新的 Go 编译器顺利编译。

在 macOS 上管理多个 Go 版本,推荐使用以下开源工具:

1. goenv(类似 Python 的 pyenv)

# 安装
brew install goenv

# 添加到 shell 配置
echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.zshrc
echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(goenv init -)"' >> ~/.zshrc

# 使用示例
goenv install 1.21.0  # 安装 Go 1.21.0
goenv install 1.20.0  # 安装 Go 1.20.0
goenv global 1.21.0   # 设置全局版本
goenv local 1.20.0    # 在当前目录使用特定版本

2. gvm(Go Version Manager)

# 安装
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

# 使用示例
gvm install go1.21 -B  # 安装 Go 1.21(二进制版本)
gvm install go1.20     # 从源码编译安装
gvm use go1.21         # 切换到 Go 1.21
gvm listall            # 查看所有可用版本

3. asdf(多语言版本管理器)

# 安装 asdf
brew install asdf

# 添加 Go 插件
asdf plugin-add golang https://github.com/asdf-community/asdf-golang.git

# 使用示例
asdf install golang 1.21.0
asdf install golang 1.20.0
asdf global golang 1.21.0  # 设置全局版本
asdf local golang 1.20.0   # 设置项目特定版本

4. 直接使用官方安装包

# 下载不同版本到不同目录
mkdir -p ~/go/versions
cd ~/go/versions
wget https://go.dev/dl/go1.21.0.darwin-amd64.tar.gz
wget https://go.dev/dl/go1.20.0.darwin-amd64.tar.gz

# 解压并切换
tar -C ~/go/versions -xzf go1.21.0.darwin-amd64.tar.gz
tar -C ~/go/versions -xzf go1.20.0.darwin-amd64.tar.gz

# 通过修改 PATH 切换版本
export GOROOT=~/go/versions/go1.21.0
export PATH=$GOROOT/bin:$PATH

验证版本切换

# 检查当前 Go 版本
go version

# 验证 GOROOT
go env GOROOT

# 示例输出:
# go version go1.21.0 darwin/amd64
# /Users/username/.goenv/versions/1.21.0

这些工具都能在 macOS 上有效管理多个 Go 版本,goenv 的 API 设计最接近 pyenv,gvm 功能最全面,asdf 支持多语言管理。选择取决于个人偏好和现有工作流。

回到顶部