Go 語言多版本安裝及管理利器 - GVM

bingohuang發表於2016-10-25

Go 的環境安裝和配置並不複雜,首先推薦看看官網的安裝教程,介紹的非常全面詳細。

如果想看中文,並擴充這方面的知識,推薦看《Go Web 程式設計》這邊開源書籍中的第一章:Go 環境配置,作者 astaxie 已經講解的非常全面直觀。

但如果你有 Go 多版本的需求(比如新老版本共存),如果你想更簡化 Go 環境配置(省去GOPATH、GOROOT等的配置),你還希望它支援跨平臺(支援Mac和Linux),那麼我特別推薦這款 Go 第三方工具:GVM—— Go 語言多版本安裝及管理利器。

GVM,類似於ruby 中的 RVM,java 中的 jenv(國產),可用於方便管理 Go 的版本,它有如下幾個主要特性:

  • 管理 Go 的多個版本,包括安裝、解除安裝和指定使用 Go 的某個版本

  • 檢視官方所有可用的 Go 版本,同時可以檢視本地已安裝和預設使用的 Go 版本

  • 管理多個 GOPATH,並可編輯 Go 的環境變數

  • 可將當前目錄關聯到 GOPATH

  • 可以檢視 GOROOT 下的檔案差異

尤其是前三個特性,非常實用,接下來就詳細的介紹一下這款工具的安裝和常用方式。

安裝 GVM

一行指令碼的事情:

bash < <(curl -s -S -L https://raw.githubusercontent. ... taller)

需要注意的是,如果本地用的是 zsh,直接替換 bash 即可。

使用 GVM

直接輸入 gvm,檢視使用幫助

☁  ~  gvm
Usage: gvm [command]

Description:
  GVM is the Go Version Manager

Commands:
  version    - print the gvm version number
  get        - gets the latest code (for debugging)
  use        - select a go version to use (--default to set permanently)
  diff       - view changes to Go root
  help       - display this usage text
  implode    - completely remove gvm
  install    - install go versions
  uninstall  - uninstall go versions
  cross      - install go cross compilers
  linkthis   - link this directory into GOPATH
  list       - list installed go versions
  listall    - list available versions
  alias      - manage go version aliases
  pkgset     - manage go packages sets
  pkgenv     - edit the environment for a package set

幫助簡單易懂,這裡介紹其中其中幾個常用的命令。

展示 Go 版本

展示當前所有可以安裝的 Go 版本,最新的是 go1.7.3

☁  ~  gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   ...
   go1.7.3

展示本地安裝好的 Go 版本,箭頭表示預設使用的版本,我這裡是 go1.7.3

☁  ~  gvm list

gvm gos (installed)

   go1.4
   go1.5
   go1.6.2
   go1.6.3
   go1.7
   go1.7.1
=> go1.7.3

對比本地沒有的版本,我們就可以線上安裝你需要的版本了。

安裝指定的 Go 版本

如果是 go 1.5- 的版本,直接安裝:

gvm install go1.4
gvm use go1.4 [--default]

它背後做的事情是先把原始碼下載下來,再用 C 做編譯。

所以如果是 go 1.5+ 的版本,因為至此 Go 實現了自舉(用 Go 編譯 Go),就需要用到 Go 1.4 來做編譯

# -B 表示只安裝二進位制包
gvm install go1.4 -B
gvm use go1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.7.3

安裝好之後,指定預設使用這個版本,加上 --default 即可,省去每次敲 gvm use

gvm use go1.7.3 --default

這個時候檢視 go 環境變數:

☁  ~  go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/bingo/.gvm/pkgsets/go1.7.3/global"
GORACE=""
GOROOT="/Users/bingo/.gvm/gos/go1.7.3"
GOTOOLDIR="/Users/bingo/.gvm/gos/go1.7.3/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/g_/tjrlnbjd4sl56gp0p2nk3j5h0000gn/T/go-build385345518=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"

全部幫你配置好了,看起來非常贊!

管理多個 GOPATH

GVM 還一個很實用的功能,可以管理多個 GOPATH(Go package),是通過 gvm pkgset 命令

☁  ~  gvm pkgset
= gvm pkgset

* http://github.com/moovweb/gvm

== DESCRIPTION:

GVM pkgset is used to manage various Go packages

== Usage

  gvm pkgset Command

== Command

  create     - create a new package set
  delete     - delete a package set
  use        - select where gb and goinstall target and link
  empty      - remove all code and compiled binaries from package set
  list       - list installed go packages

說明的很詳細,使用方法和 gvm 也類似,就不贅述

解除安裝

如果只是想解除安裝某個安裝好的 Go 版本:

gvm uninstall go1.7.3

如果你想完全解除安裝掉 GVM 和 所有安裝的 Go 版本(需謹慎):

gvm implode

注意和不足

  • 在 Linux 下安裝 GVM,需要安裝相關依賴,詳情見官網說明
  • GVM 官方顯示沒對 Windows 做支援,考慮到 Windows 不是程式設計師的標配吧(有同學回覆用 git-windows客戶端,自帶bash功能,可以自行嘗試安裝下)。
  • GVM 安裝新版本之後,Go 環境變數會重新設定,為了節約磁碟空間和時間,建議把之前版本的 GOPATH 內容移動到新版本對應的 GOPATH 目錄下,相關路徑可以通過 go env 獲取
  • 在同一版本下,用 gvm pkgset 建立多個 GOPATH,可能會佔用你比較大的磁碟空間
  • 使用 gvm implode 需謹慎
  • GVM 是用 shell 編寫

相關文章