使用gvm管理golang版本遇到一個問題,就是我在.zshrc中設置了GOPATH,可是使用gvm切換後GOPATH又被gvm從新設置了,默認是$GVM_ROOT/pkgsets/go1.12.5/global。而我但願切換不一樣的GOROOT而GOPATH不變,由於個人項目代碼都在原來的GOPATH中。golang
多版本共用一個GOPATH是沒有衝突的,1.9的包會下載位置是$GOPATH/src,1.12的包下載位置是$GOPATH/mod。設置export GO111MODULE=on,1.12的項目用了gomod是不依賴GOPTAH的,新老項目放在公司路徑下都能正常編譯。shell
下面讓咱們解決這個問題。函數
最簡單粗暴的方法就是gvm use 1.x以後,source .zshrc一下將$GOPATH設置爲原來的。可是這顯的很蠢。code
第二種方法是gvm提供了修改環境變量的命令,gvm pkgenv,能夠修改當前版本go相關的環境變量,注意這個命令只能改當前版本的,好比我如今是1.12,我要改全,還要go use 1.9再改一遍。另外改好了還要使用go use 1.x --default
將default也改了。看了一下源碼,環境變量都在$GVM_ROOT|environments文件夾裏,進去把GOPATH批量替換了就好了,記得先備份一份。ip
第三種方法就是修改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),包和項目集中存放挺好。io