使用gvm管理多golang版本,但我想使用統一的GOTPAH

使用gvm管理golang版本遇到一個問題,就是我在.zshrc中設置了GOPATH,但是使用gvm切換後GOPATH又被gvm重新設置了,默認是$GVM_ROOT/pkgsets/go1.12.5/global。而我希望切換不同的GOROOT而GOPATH不變,因爲我的項目代碼都在原來的GOPATH中。

多版本共用一個GOPATH是沒有衝突的,1.9的包會下載位置是$GOPATH/src,1.12的包下載位置是$GOPATH/mod。設置export GO111MODULE=on,1.12的項目用了gomod是不依賴GOPTAH的,新老項目放在公司路徑下都能正常編譯。

下面讓我們解決這個問題。

最簡單粗暴的方法就是gvm use 1.x之後,source .zshrc一下將$GOPATH設置爲原來的。但是這顯的很蠢。

第二種方法是gvm提供了修改環境變量的命令,gvm pkgenv,可以修改當前版本go相關的環境變量,注意這個命令只能改當前版本的,比如我現在是1.12,我要改全,還要go use 1.9再改一遍。另外改好了還要使用go use 1.x --default將default也改了。看了一下源碼,環境變量都在$GVM_ROOT|environments文件夾裏,進去把GOPATH批量替換了就行了,記得先備份一份。

第三種方法就是修改gvm use命令,gvm是shell編寫的,安裝好後各種命令都在$GVM_ROOT/scripts下,use命令對應的文件是$GVM_ROOT/scripts/env,在函數後面加一行export GOPATH=~/gopath。也可以自己寫個包裹函數:

export ZGOPATH=~/gopath
function gouse() {
    gvm use $1
    export GOPATH=$ZGOPATH
}

開始用的第二種方法,後面還是覺得第三種方法最省事,記錄一下自己折騰操蛋的GOPATH的過程。go1.11有了go mod之後,心想終於可以拋棄GOPATH了,實際是必須要一個巫妖王(GOPATH),包和項目集中存放挺好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章