Go下载安装及切换不同版本的方法

一、下载安装

Go下载地址

Go提供了Windows、MacOS(ARM64) 和 MacOS(x86-64)、Linux版本,也可以下载源码自己编译安装。

Linux && MacOS

  • 下载压缩包

  • 解压到指定目录,如:/usr/local

shell 复制代码
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gz
  • 把go的bin目录添加到环境变量
shell 复制代码
在 ~/.zshrc或~/.bashrc中添加如下行

export PATH=$PATH:/usr/local/go/bin
  • 使用环境变量立即生效
shell 复制代码
source ~/.zshrc 或 source ~/.bashrc
  • 测试go是否安装成功
shell 复制代码
go version

Windows

  • 直接双击 .msi文件进行引导安装

  • 安装完成后打开 cmd 或 power shell 输入 go version 验证安装是否成功

二、如何切换Go版本?

方法一:直接下载不同版本的压缩包,使用软连接指向不同的版本

  • 下载完压缩包,解压到其他目录,如:
shell 复制代码
tar -C ~/Downloads -xzf go1.21.9.linux-amd64.tar.gz
  • 把go目录重命名为 go1.21.9
shell 复制代码
mv go go1.21.9
  • 新建一个go全局目录,如:go_version
shell 复制代码
mkdir ~/go_version
  • 做一个软链接指向go1.21.9版本
shell 复制代码
ln -s ~/Downloads/go1.21.9 ~/go_version/go
  • 把~/go_version/go/bin目录加到到环境变量
shell 复制代码
export PATH=~/go_version/go/bin:$PATH
  • 验证是否安装成功
shell 复制代码
go1.21.9 version

扩展:此法为切换软件的通法,其他软件也适用。

方法二:使用go install 命令安装其他版本

已经安装go的情况下(例如当前版本为:1.22.2),可以通过go install 来安装其他版本

shell 复制代码
go install golang.org/dl/go1.22.1@latest

go1.22.1 download

go install 命令会把go1.22.1版本作为1.22.2的可执行安装包,存放在 ~/go/bin下面

再去用go1.22.1 download 则会下载1.22.1的源码,放到~/sdk下面

此时就可以用go1.22.1 version来验证是否安装成功了

为什么可以直接敲go1.22.1呢?实际上执行的是~/go/bin/go1.22.1这个二进制文件,而~/go/bin又加入了PATH变量,所以能执行。

sdk是不能删除的,go1.22.1会读取sdk里面的源码,删除后会提示sdk没有下载。

方法三:使用gvm来切换

gvm全称:Go Version Manager (GVM)是一个用于管理Go环境的开源工具。它支持安装多个Go版本,并使用GVM "pkgsets" 管理每个项目的模块。GVM(与Ruby中的RVM一样)最初是由Josh Bussdieker开发的,它允许为每个项目或项目组创建开发环境,分离不同的Go版本和包依赖关系,以提供更大的灵活性并防止版本问题。

安装gvm

shell 复制代码
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

命令解析:

-s -S 连用表示禁用进度条但可以显示错误信息

-L 表示重定向跟随

<(...) 此处为<(curl ...) ,此语法表示curl的执行结果被视作文件

bash < 表示拿到curl的执行结果作为标准输入传给bash

通过gvm安装go

shell 复制代码
gvm install go1.22.2

通过gvm切换go版本

shell 复制代码
gvm use go1.22.2

列出所有通过gvm安装的go版本

shell 复制代码
gvm list

列出所有可用的线上go版本

shel 复制代码
gvm listall

卸载go版本

shell 复制代码
gvm uninstall go1.22.2

完全移除gvm及其所有安装的go版本和依赖包

shell 复制代码
gvm implode

如果卸载失败,直接 rm -rf ~/.gvm

管理go的依赖包

pkgset允许独立管理不同的Go包集及其版本,从而更容易在不同的项目依赖关系之间切换。

shell 复制代码
// 创建包集合
gvm pkgset create [name]

// 选择包集合
gvm pkgset use [name]

// 列出创建的包集合
gvm pkgset list

// 删除包集合
gvm pkgset delete [name]

切换到指定的包集后,后续使用go build、go run命令时会把下载的包安装到包集目录

其他gvm命令

  • 打印gvm版本
shell 复制代码
gvm version
  • 获取gvm最新版本
shell 复制代码
gvm get
  • 打印帮助信息
shell 复制代码
gvm help

gvm 原理

其内部核心也是使用软连接,通过指向不同的版本使用不同的环境变量

后面再进行源码分析

相关推荐
幼儿园老大*9 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
童先生16 小时前
Go 项目中实现类似 Java Shiro 的权限控制中间件?
开发语言·go
幼儿园老大*17 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
架构师那点事儿1 天前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
于顾而言2 天前
【笔记】Go Coding In Go Way
后端·go
qq_172805592 天前
GIN 反向代理功能
后端·golang·go
follycat2 天前
2024强网杯Proxy
网络·学习·网络安全·go
OT.Ter2 天前
【力扣打卡系列】单调栈
算法·leetcode·职场和发展·go·单调栈
探索云原生2 天前
GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
ai·云原生·kubernetes·go·gpu
OT.Ter2 天前
【力扣打卡系列】移动零(双指针)
算法·leetcode·职场和发展·go