GVM - Go 的多版本管理工具,使用介紹

原文做者: dryyun
原文連接: https://dryyun.com/2018/11/28...

基本介紹

項目地址

Go GitHub
GVM GitHub

本機環境

設備 MacBook Pro
系統 macOS High Sierra 10.13.6

多版本管理使用場景

在 Mac 上使用 brew install go 真的很簡單,一個命令就安裝了最新版本的 Go,可是在實際使用過程當中php

  • 線上版本跟你本地版本不同,你須要切換
  • 想嘗試一下最新版本的 Go,可是實際開發仍是不變
  • 其餘語言都有 xxvm 工具,Go 也要來一個
以上,其實使用 docker 就能解決了,相比而言,我以爲直接切換版本是更輕量級的作法,除非你有同時開發幾個項目,都使用不一樣版本的 Go 的經驗。

brew 有一點很差就是不能安裝舊版本的軟件,不能安裝舊版本的 Go,在切換 Go 版本上也略顯麻煩,這個時候就要用到多版本管理了。linux

吐槽一下 brew 的升級,讓我不能開心的切換 PHP 版本了,之前的 formula 有 php55,php56,php70,php71 ,都是獨立的存在,只要 brew unlink,brew link 就能夠了
如今改爲 php@5.6,php@7.0,php@7.1,實現方式不一樣了,要切換版本,每次都要改 .zshrc 文件

使用

安裝

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
若是使用的 zsh,那麼把 bash 改爲 zsh 便可 git

安裝成功,會在家目錄下增長 .gvm 的隱藏目錄,而且在 .bashrc 或者 .zshrc 文件最底部增長一行
[[ -s "/Users/someone/.gvm/scripts/gvm" ]] && source "/Users/someone/.gvm/scripts/gvm"github

命令

基於 GVM v1.0.22 golang

特別說明web

因爲 Go 1.5 使用了自舉,也就是用 Go 寫 Go,若是在系統環境徹底沒有 Go 命令的狀況下,使用 gvm install go 會報錯,能夠參考 gvm 文檔相關說明,會要求先安裝 Go 1.4,可是呢,對於高版本的 macOS 來講,安裝 Go 1.4 是會失敗的。
因此個人作法是使用 brew install go 先安裝一個 Go,而後再使用 gvm 安裝多版本,不過也只是建議安裝 >= 1.5 的版本。

GVM 本質上就是 shell 腳本,而做者的文檔寫的也不盡如人意,若是對命令不瞭解,對命令不滿意,徹底能夠進入 cd ~/.gvm/scripts,查看、修改相應的命令。
好比查看各個命令的 help 幫助就很不一樣,gvm install - ,gvm listall help,gvm use -h,只能感慨做者 。docker

Usage: gvm [command]

Description:
  GVM is the Go Version Manager

Commands:
  version    - print the gvm version number
             - 打印 GVM 的版本
             
  get        - gets the latest code (for debugging)
             - 獲取 GVM 最新的代碼
             
  use        - select a go version to use (--default to set permanently)
             - 當前終端環境使用某個 go 版本,加上 --default 表明全部新打開的終端環境都使用這個版本
             - 查看幫助,`gvm use -h`
             
  diff       - view changes to Go root
             - ???
             
  help       - display this usage text
             - 顯示幫助信息
  
  implode    - completely remove gvm
             - 完全刪除 gvm 和安裝的全部 go 版本和包
             - 若是命令沒用,那麼刪除 `rm -rf ~/.gvm` 目錄,去掉 .bashrc 或者 .zshrc 的相關內容便可  
  
  install    - install go versions
             - 安裝某個 go 的版本
             - 能夠加上 tag, gvm install [tag],參考 https://github.com/golang/go/tags ,安裝一些非穩定版本  
             - 查看幫助,`gvm install - `
             
  uninstall  - uninstall go versions
             - 卸載某個 go 版本
             
  cross      - install go cross compilers
             - 安裝交叉編譯器
             - gvm cross [os] [arch],os = linux/darwin/windows,arch = amd64/386/arm
  
  linkthis   - link this directory into GOPATH
             - 連接指定目錄到 GOPATH 路徑
             - 以我的使用來講,只要正確設置 GOPATH 就行,這個命令基本用不到,能夠往下看 GOPATH 設置部分
             - 查看幫助,gvm linkthis -h
             - 吐槽,是否是缺了 unlink 命令。。
             
  list       - list installed go versions
             - 列出安裝的 Go 版本
             
  listall    - list available versions
             - 列出可用的 Go 版本
             - 使用 `--all `,列出全部的 tags 
             - 查看幫助,gvm listall help
             
  alias      - manage go version aliases
             - 管理 Go 版本別名
             - gvm alias list ,列出全部別名
             - gvm alias create [alias name] [go version name],建立別名
             - gvm alias delete [alias name] ,刪除別名
             - 我的感受也基本用不到
             
  pkgset     - manage go packages sets
             - gvm pkgset [create/use/delete/list/empty] [pkgset name] 
             - 管理 GOPATHs 環境變量
             - 會在 `~/.gvm/environments` 目錄下建立相應的文件
             - 吐槽,沒有相似的 unuse 命令 
             
  pkgenv     - edit the environment for a package set
             - 編輯 pkgset 的環境變量
             - gvm pkgenv [pkgset name]

環境設置

經過 go env 能夠查看當前設置的 Go 的環境。
其中 GOPATH 的設置,確定是最重要的,不過在 go 1.11 版本中,推出了 go module,好像弱化了 gopath 的做用
經過 gvm use [version] 切換 Go 的版本,也會更改相應的環境變量,其中就包括 GOPATH="/Users/someone/.gvm/pkgsets/go1.10.4/global"
那麼問題來了,我每次切換版本,都會改變 GOPATH ,這在開發中很蛋疼,你能夠看出有三個命令,linkthis,pkgset,pkgenv 都是跟環境變量有關的。 shell

對我而言,這些命令都不用,承接上文中安裝,再在 [[ -s "/Users/someone/.gvm/scripts/gvm" ]] && source "/Users/someone/.gvm/scripts/gvm" 這句話後面增長相應的環境變量就能夠覆蓋了。windows

GOPATH="$home/go" GOBIN="$GOPATH/bin" PATH="​$GOBIN:$PATH"
相關文章
相關標籤/搜索