Go多版本共存

Go多版本共存

场景#

工作需要,一般使用的是相对较低的go版本,且较长时间内不会轻易变更;自己尝鲜或参与某个开源项目,又会使用另外的go版本。在不同项目间切换工作,通常需要切换到对应的go版本(虽然go目前是向下兼容的,高版本可以正确编译低版本,但开发人员即便熟知不同版本间的差异,也不能百分百保证不使用到高版本的特性)。

解决方案#

网上也有很多方案,尝试后摸索出了比较符合自己风格和习惯的方案。

创建一个存放go不同版本的目录,用于将不同版本下载到该目录统一管理,并以版本号命名

1

mkdir $HOME/gosdk

编写下载脚本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进行切换

相关推荐