原文做者: 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
以上,其實使用 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"