GVM -Golang 的多版本管理工具

切換go版本,GOPATH跟著變動的問題

--

Photo by Hanson Lu on Unsplash

1. 安裝

就不多說了,請參考以下連結

Ref1:小码农的碎碎念-GVM — Go 的多版本管理工具,使用介绍

Ref2:官方網站

2. gvm運作方式

gvm是利用腳本撰寫指令,對環境變數進行判斷跟修改,gvm成功安裝會在家目錄~/.bashrc這個腳本檔案的最後一行加入以下敘述

鳥哥的Linux 私房菜 — 10.4.3 環境設定檔.bashrc

[[ -s "/Users/someone/.gvm/scripts/gvm" ]] && source "/Users/someone/.gvm/scripts/gvm"

中括號為判斷模式,說明括號內情況,-s是說該檔名是否存在且為『非空白檔案』,如果有內容中括號則回傳true

&&的描述如下,若前面的敘述為真,則執行後面的敘述,類似的運算子,還有||的描述,若前面的敘述為真,則”不”執行後面的敘述

對腳本撰寫有興趣的請去看鳥哥,總之最後上面的敘述會執行這個路徑的gvm腳本/Users/someone/.gvm/scripts/gvm

鳥哥的Linux 私房菜 — 第十二章、學習Shell Scripts

3. 問題

每次使用gvm use [version] 的指令後,環境變數都會被改變,當然改變GOROOT的環境變數是很好的,畢竟我們就是想控制GO的版本,但是偏偏作者連GOPATH的變數也跟著改變,這就有點麻煩,就我個人使用,我會希望GOPATH的路徑可以一致,也發現其他人有類似問題

How can i use my own GOPATH default? #277

Leave the $GOPATH alone please #189

4. 解決

當你用gvm install go1.12 會在~/.gvm/environments/建立兩個相對應的檔案go1.12go1.12@global,使用gvm use go1.12 的指令,就是去讀取這些檔案

若使用gvm use go1.12 --default則會生成default檔案,內容與go1.12完全一致,如下圖所示

想要每次切換版本,都讓GOPATH固定,必須對gvm安裝的go版本,修改路徑~/.gvm/environments/下的文件

以我的例子就是修改檔案go1.4,go1.11.5,go1.12,修改內容都一樣,將GOPATH與PATH修改,每個人的GOPATH不同,看你自己想放在哪邊吧

這樣做一定會影響到gvm其他的功能,但我主要只用來安裝不同go版本,跟切換用途,沒有造成太大影響,若害怕修改有問題,可以像我一樣,用其他資料夾備份原始設定

以上就是這次的總結

export GOPATH; GOPATH="$HOME/go"
export PATH; PATH="$GOROOT/bin:${PATH}:$GOPATH/bin"

--

--

Gopher is cute
Caesar's study review on Web development

我的第一份後端工作結束了,短短四個月,部門全員掰掰,尋找新的機會。