成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

安裝了多個版本的 Go,該怎么用才正確?

開發 架構
實際開發中會接觸到不同的開源項目,而這些項目有可能是不同團隊開發的,使用的 go 版本都是不一樣的。

本文轉載自微信公眾號「Go編程時光」,作者寫代碼的明哥。轉載本文請聯系Go編程時光公眾號。

1. 需求背景

實際開發中會接觸到不同的開源項目,而這些項目有可能是不同團隊開發的,使用的 go 版本都是不一樣的。

以我為例,最近在研究 KubeVirt (一個能在 K8S 下管理虛擬機的開源項目),為了實現自己的需求,需要對 KubeVirt 進行二次開發。

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

而同時我的機器上很早之前就安裝過 go 1.14 的版本,也一直使用它來開發。

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

2. 安裝多版本的 Go

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

首先下載兩個版本的安裝包

  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.  
  5. # 解壓go 1.13 
  6. sudo tar -C /tmp/  -xzf go1.13.linux-amd64.tar.gz 
  7. mv /tmp/go /usr/local/go13 

3. 簡單粗暴的方案

在同一臺機器中安裝多個版本的 Golang 需要注意

  • 區分不同版本的 go 入口
  • 切換使用不同的環境變量

區分不同版本 go 入口

當你在環境中有多個 go ,那么當你使用 go build 等命令時,系統如何知道你想要使用的是哪個版本呢?

系統并不知道,因此你需要為不同版本的 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 

切換使用不同的環境變量

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

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

因此,這個切換不同環境變量得自己來做

另外要注意的是:

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

知道了這幾點之后,便可以自行實現切換的方案。

我想的方案是可以在 /usr/local/go13/bin/ 寫一個修改環境變量的腳本

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

下次要使用 go 1.12 的時候,直接使用下面命令就可以修改環境變量

  1. $ source goto12 

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

實現的效果如下

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

4. 比上面更優的方案

到這里,你應該已經感受到了,每次切換都要手動 source 一下,還是有點麻煩。

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

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

  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.  
  7. $ chmod + /usr/local/go12/bin/go12 
  8.  
  9. $ cat << EOF >/usr/local/go13/bin/go13 
  10. unset GOROOT 
  11. go env -w GOROOT="/usr/local/go13/" 
  12. /usr/local/go13/bin/go $@ 
  13. EOF 
  14.  
  15. $ chmod + /usr/local/go13/bin/go13 

如果一來,當你執行 go12 就會自動修改 go12 的環境變量,執行 go13 就會自動修改 go13 的環境變量,并且不會影響默認的 go 的行為。

 

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

 

責任編輯:武曉燕 來源: Go編程時光
相關推薦

2021-06-09 23:36:46

Golang語言版本

2023-08-01 12:45:39

用戶細分消費習慣

2016-11-22 08:23:44

舊手機安全隱患信息安全

2025-06-09 08:00:57

2022-04-24 08:23:19

Redis內存淘汰策略

2022-12-12 08:53:53

Go版本方式

2025-06-09 01:22:00

Go版本管理器

2011-07-06 17:07:08

筆記本技巧

2011-07-09 16:25:00

筆記本技巧

2015-10-28 10:29:09

數據中心運輸硬驅

2022-04-07 11:27:15

數字孿生VR系統AI

2014-11-28 09:45:35

程序員

2021-06-28 15:00:06

DRF模型序列化

2023-11-27 12:24:23

算法模型業務模型

2024-09-13 11:49:15

2022-07-26 12:18:05

Python編程語言列表解析式

2022-01-17 16:18:14

Go枚舉源碼

2014-04-09 09:32:24

Go并發

2024-03-05 07:55:41

框架GINGo

2018-06-28 08:41:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区免费视频 | 久久久久久久一区 | 午夜精品久久久 | 国产精品久久久久久久一区探花 | 欧美性吧 | 欧美黄色绿像 | 亚洲三级免费看 | 在线观看中文字幕视频 | 蜜臀久久 | 91久久| 国产美女精品视频免费观看 | 99精品久久 | 亚洲国产精品久久久 | 黄色免费在线观看网址 | 天天操狠狠操 | 欧美成人第一页 | 国产一级片91 | 精品美女视频在线观看免费软件 | 欧美日韩电影一区二区 | 日本精品视频一区二区 | 免费av播放 | 欧美一区二区三区四区视频 | 精品日韩一区二区三区 | 中文字幕影院 | 91秦先生艺校小琴 | 玖玖在线精品 | 亚洲在线久久 | 国产精品久久久久久久久久久久久 | 免费看91 | 国产免费播放视频 | 日韩视频在线一区 | 99精品观看 | 蜜桃视频在线观看www社区 | 久久久久久久久久影视 | 2019天天干夜夜操 | 国产成人一区在线 | 99精品免费视频 | 成人久久久久 | 国产成人一区二区三区久久久 | 一区二区精品电影 | 免费a大片|