工作需要,一般使用的是相对较低的go版本
,且较长时间内不会轻易变更;自己尝鲜或参与某个开源项目,又会使用另外的go版本
。在不同项目间切换工作,通常需要切换到对应的go版本
(虽然go
目前是向下兼容的,高版本可以正确编译低版本,但开发人员即便熟知不同版本间的差异,也不能百分百保证不使用到高版本的特性)。
解决方案#
网上也有很多方案,尝试后摸索出了比较符合自己风格和习惯的方案。
- 创建一个存放go不同版本的目录,用于将不同版本下载到该目录统一管理,并以版本号命名
- 编写下载脚本
download_go.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#!/bin/bash
if test "${1}" == ""; then
echo '请传入正确的版本号,如:'${0}' 1.21.1'
else
# 统一管理目录
gosdk=$HOME/gosdk
# 下载
gopkg=go${1}.linux-amd64.tar.gz
if ! test -e ${gopkg}; then
wget -c https://dl.google.com/go/${gopkg}
fi
# 删除可能冲突的文件
rm -rf ${gosdk}/go
rm -rf ${gosdk}/go${1}
# 解压
tar -C ${gosdk}/ -xzf ${gopkg}
# 重命名
mv ${gosdk}/go ${gosdk}/go${1}
# 删除安装包
rm ${gopkg}
# 配置环境变量
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
fi
|
- 编写切换脚本
switch_go.sh
:
1
2
3
4
5
6
7
8
9
10
|
#!/bin/bash
if test "${1}" == ""; then
echo '请传入正确的版本号,如:'${0}' 1.21.1'
else
# 统一管理目录
gosdk=$HOME/gosdk
# 创建符号链接
ln -sfn ${gosdk}/go${1} $HOME/.local/go
fi
|
- 将符号链接的路径加入搜索路径:
1
|
echo -e "\n# golang \nexport PATH=\$PATH:\$HOME/.local/go/bin:\$HOME/go/bin" >> ~/.bashrc
|
-
将download_go.sh
和switch_go.sh
放入$HOME/.local/bin
之类已存在于搜索路径的目录下,或将其所在路径加入搜索路径
-
使用download_go.sh
下载所需版本的go,在需要切换时使用switch_go.sh
进行切换