日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
安裝了多個(gè)版本的Go,該怎么用才正確?

本文轉(zhuǎn)載自微信公眾號「Go編程時(shí)光」,作者寫代碼的明哥。轉(zhuǎn)載本文請聯(lián)系Go編程時(shí)光公眾號。

1. 需求背景

實(shí)際開發(fā)中會接觸到不同的開源項(xiàng)目,而這些項(xiàng)目有可能是不同團(tuán)隊(duì)開發(fā)的,使用的 go 版本都是不一樣的。

以我為例,最近在研究 KubeVirt (一個(gè)能在 K8S 下管理虛擬機(jī)的開源項(xiàng)目),為了實(shí)現(xiàn)自己的需求,需要對 KubeVirt 進(jìn)行二次開發(fā)。

通過 go.mod 得知 KubeVirt 是使用 go 1.13 開發(fā)的,而同時(shí)為了能在 KubeVirt 下的虛擬機(jī)能使用 LVM 這種存儲方式,我們又引入了阿里研發(fā)的 lvm-csi 插件,同樣的,這個(gè)插件已經(jīng)實(shí)現(xiàn)的功能距離我們的預(yù)期還有點(diǎn)差距,因此同樣要進(jìn)行二次開發(fā)。查看 go.mod 發(fā)現(xiàn),lvm-csi 是在更老的版本下開發(fā)的,也就是 go 1.12 。

而同時(shí)我的機(jī)器上很早之前就安裝過 go 1.14 的版本,也一直使用它來開發(fā)。

問題就來了,如何讓才能在我的機(jī)器上能同時(shí)安裝這么多個(gè)版本的 golang ,而且互不沖突呢?

2. 安裝多版本的 Go

要想不同版本的 go 互不沖突,只要將他們安裝在不同的目錄下就可以了。

首先下載兩個(gè)版本的安裝包

 
 
 
 
  1. $ wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz
  2. $ wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz

然后分別解壓至不同目錄

 
 
 
 
  1. # 解壓go 1.12
  2. sudo tar -C /tmp/ -xzf go1.12.linux-amd64.tar.gz
  3. mv /tmp/go /usr/local/go12 
  4. # 解壓go 1.13
  5. sudo tar -C /tmp/  -xzf go1.13.linux-amd64.tar.gz
  6. mv /tmp/go /usr/local/go13

3. 簡單粗暴的方案

在同一臺機(jī)器中安裝多個(gè)版本的 Golang 需要注意

  • 區(qū)分不同版本的 go 入口
  • 切換使用不同的環(huán)境變量

區(qū)分不同版本 go 入口

當(dāng)你在環(huán)境中有多個(gè) go ,那么當(dāng)你使用 go build 等命令時(shí),系統(tǒng)如何知道你想要使用的是哪個(gè)版本呢?

系統(tǒng)并不知道,因此你需要為不同版本的 go 起不同的名字

  • go 1.12 的 go 入口就改成 /usr/local/go12/bin/go12
  • go 1.13 的 go 入口就改成 /usr/local/go13/bin/go13
  • 以此類推

如此一來,就不會混淆了

 
 
 
 
  1. $ go12 version
  2. go version go1.12 linux/amd64
  3. $ go13 version
  4. go version go1.13 linux/amd64

切換使用不同的環(huán)境變量

使用了不同的go入口,對應(yīng)的環(huán)境變量也要變量,比如 GOROOT,它可不會隨著你使用哪個(gè)版本的 go 就自動切換,看下面他們輸出的都是一個(gè)值。

 
 
 
 
  1. $ go12 env GOROOT
  2. /usr/local/go
  3. $ go13 env GOROOT
  4. /usr/local/go

因此,這個(gè)切換不同環(huán)境變量得自己來做

另外要注意的是:

  • go 1.12 沒有 go env -w 中的 -w 參數(shù)
  • go 1.13 中雖然有 -w 但不能覆蓋OS級別的環(huán)境變量,修改前需先 unset

知道了這幾點(diǎn)之后,便可以自行實(shí)現(xiàn)切換的方案。

我想的方案是可以在 /usr/local/go13/bin/ 寫一個(gè)修改環(huán)境變量的腳本

 
 
 
 
  1. $ cat << EOF >/usr/local/go12/bin/goto12
  2. unset GOROOT
  3. go env -w GOROOT="/usr/local/go12/"
  4. EOF
  5. $ chmod +x /usr/local/go12/bin/goto12

下次要使用 go 1.12 的時(shí)候,直接使用下面命令就可以修改環(huán)境變量

 
 
 
 
  1. $ source goto12

go 1.13 也是同理,不敢贅述。

實(shí)現(xiàn)的效果如下

 
 
 
 
  1. $ go env GOROOT
  2. /usr/local/go
  3. $ source goto12
  4. $ go12 env GOROOT
  5. /usr/local/go12
  6. $source goto13
  7. $ go13 env GOROOT
  8. /usr/local/go13

4. 比上面更優(yōu)的方案

到這里,你應(yīng)該已經(jīng)感受到了,每次切換都要手動 source 一下,還是有點(diǎn)麻煩。

其實(shí)我還有一個(gè)更好的方法,這種方案,可以不用去改 go 入口的名字,同樣連 source 都不用。

只要執(zhí)行下面兩條件命令即可(每個(gè)版本兩條,兩個(gè)版本就是四條)

 
 
 
 
  1. $ cat << EOF >/usr/local/go12/bin/go12
  2. unset GOROOT
  3. go env -w GOROOT="/usr/local/go12/"
  4. /usr/local/go12/bin/go $@
  5. EOF
  6. $ chmod + /usr/local/go12/bin/go12
  7. $ cat << EOF >/usr/local/go13/bin/go13
  8. unset GOROOT
  9. go env -w GOROOT="/usr/local/go13/"
  10. /usr/local/go13/bin/go $@
  11. EOF
  12. $ chmod + /usr/local/go13/bin/go13

如果一來,當(dāng)你執(zhí)行 go12 就會自動修改 go12 的環(huán)境變量,執(zhí)行 go13 就會自動修改 go13 的環(huán)境變量,并且不會影響默認(rèn)的 go 的行為。

當(dāng)然以上我都只改了 GOROOT 這一環(huán)境變量,若在不同的 go 版本還有其他不一樣的地方,可以繼續(xù)在 go12 或者go13 中添加對應(yīng)的 shell 代碼。


當(dāng)前標(biāo)題:安裝了多個(gè)版本的Go,該怎么用才正確?
本文URL:http://www.5511xx.com/article/dpoesdp.html