一、下载安装

Go下载地址
在这里插入图片描述

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

Linux && MacOS

  • 下载压缩包

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

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

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

Windows

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

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

二、如何切换Go版本?

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

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

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

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

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

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

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

gvm install go1.22.2

通过gvm切换go版本

gvm use go1.22.2

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

gvm list

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

gvm listall

卸载go版本

gvm uninstall go1.22.2

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

gvm implode

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

管理go的依赖包

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

// 创建包集合
gvm pkgset create [name]

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

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

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

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

在这里插入图片描述

其他gvm命令

  • 打印gvm版本
gvm version
  • 获取gvm最新版本
gvm get
  • 打印帮助信息
gvm help

gvm 原理

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

后面再进行源码分析

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐