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 原理

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

后面再进行源码分析

相关推荐
一丝晨光11 小时前
Java、PHP、ASP、JSP、Kotlin、.NET、Go
java·kotlin·go·php·.net·jsp·asp
zaim119 小时前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
百里守约学编程1 天前
70. 爬楼梯
算法·leetcode·go
a_ran2 天前
一些 Go Web 开发笔记
后端·golang·go·编程·web·网站
影灵衣丶2 天前
go进阶编程:设计模式之适配器模式
后端·go
StevenZeng学堂3 天前
【云原生安全篇】Cosign助力Harbor验证镜像实践
网络·安全·云原生·容器·kubernetes·云计算·go
qq_172805594 天前
GO Message Bus
开发语言·后端·golang·go
一丝晨光4 天前
void类型
java·开发语言·javascript·c++·c#·go·c
IT杨秀才4 天前
自己动手写了一个协程池
后端·程序员·go
狼爷4 天前
解开 Golang‘for range’的神秘面纱:易错点剖析与解读
go