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 小时前
第1章 Rust语言概述
java·开发语言·人工智能·python·rust·go·1024程序员节
会跑的葫芦怪12 小时前
区块链开发与核心技术详解:从基础概念到共识机制实践
go·区块链
资源开发与学习14 小时前
Go工程师进阶 IM系统架构设计与落地
go
源码7可14 小时前
GO进阶,IM系统架构设计与落地 教程分享
go
Mgx19 小时前
Go语言实现的简易远程传屏工具:让你的屏幕「飞」起来
go
Mgx19 小时前
布隆过滤器(go):一个可能犯错但从不撒谎的内存大师
go
Lea__20 小时前
深拷贝优化:从 copier 到 go_deep_copy 的演进
go
喵个咪1 天前
开箱即用的GO后台管理系统 Kratos Admin - 站内信
后端·微服务·go
Mgx2 天前
用 Go 手搓一个 NTP 服务:从“时间混乱“到“精准同步“的奇幻之旅
go
wohuidaquan2 天前
本地生活曝光缺失?GEO语义锚点来救场
go