這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
我們需要獨立的workspace
在我們進行一個項目的開發時,總是希望一個項目獨立使用一個workspace,用於隔離各個項目的依賴環境。以ruby項目為例,如果公用workspace,會導致gemset公用,可能在多項目開發的時候,難以隔離各個項目不同的gem,在開發以及運行時出現預料外的問題,所以一般的ruby項目,都會在項目根目錄下,使用.ruby-version以及.ruby-gemset來規定當前項目的ruby版本以及gemset,配合rvm或rbenv等版本工具,使ruby項目能使用獨立的workspace。
那麼,Go語言的項目,能不能這麼做呢?
Go的項目隔離
比照ruby語言,Go語言在使用中也面臨了2個問題:
1.語言版本進步很快,需要對應項目進行語言版本管理。2.第三方庫的版本隔離
要解決問題1,我們需要一個工具來安裝多個Go版本,並提供方便的切換功能。
而對於問題2,我們知道Go使用GOPATH這個環境變數來管理編譯時間的原始碼路徑,所以第三方庫也是下載在GOPATH下,並且我們的原始碼也需要處於GOPATH下。於是就需要一個工具,能根據方便的設定GOPATH。
在網上搜尋後,發現了 gvm 這個好用的工具。這個以shell指令碼開發的工具,同時相容bash和zsh,用法和ruby的rvm很像,能做到Go語言版本的切換以及GOPATH的修改。
通過gvm管理workspace
安裝gvm
github地址:https://github.com/moovweb/gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
如果用的是zsh,將 bash 替換為 zsh。
安裝Go
這裡我們用Go 1.4.2版本為例,運行下面的命令:
gvm install go1.4.2
需要使用這個版本,執行gvm use go1.4.2,如果需要將這個版本作為預設版本,我們可以執行gvm use go1.4.2 --default
建立項目的workspace
我們來建立一個項目,名字叫baozou。項目目錄放在~/goproj/下。
mkdir -p ~/goproj/baozou cd ~/goproj/baozou gvm pkgset create --local gvm pkgset use --local mkdir src
在上面的命令中,我們建立了baozou項目的目錄,進入目錄後,使用gvm pkgset create -local命令,將目錄設為一個local的pkgset,然後通過gvm pkgset use --local來使用它,這時,當前的環境變數的GOPATH為:
$HOME/goproj/baozou:$HOME/goproj/baozou/.gvm_local/pkgsets/system/local:$HOME/.gvm/pkgsets/system/global
可以看到,GOPATH已經被設定為baozou這個項目目錄了,這時我們執行go get命令來下載第三方庫的時候,會預設下載到$HOME/goproj/baozou/src目錄下。
接下來,我們來建立真正用於代碼管理的目錄:
mkdir -p ~/goproj/baozou/src/baozou cd ~/goproj/baozou/src/baozou git init
這裡,我們用git來管理項目的軟體版本。現在,我們可以在~/goproj/baozou/src/baozou這個目錄下來編寫代碼了。
總結
通過使用gvm,我們能夠根據項目切換Go語言版本以及切換GOPATH目錄。這2大功能,協助我們給每一個Go項目提供獨立的workspace,互相不干擾。