Golang 多版本管理神器 gvm

緣起

最近編譯 kubernetes 遇到了點坑,編譯各種報錯,經搜索調研發現 k8s 的編譯對 go 的版本有很嚴格的要求。比如我的 go1.13.4 就無法編譯 kubernetes v1.16.3,必須得 go1.12.xx 版本才能編譯。爲了解決這種尷尬的場景只能再在主機安裝個 go1.12.xx 版本,那麼有沒有什麼優雅的方式來實現本機多版本 Golang 版本的管理呢,能很方便的進行不同版本的切換,這也是本文的目的,推薦一款 Go多版本管理神器 gvm,用法類似 Python 的多版本管理工具 pyenv

簡介

gvm,即 Go Version Manager,Go 版本管理器,使用 shell 腳本開發,它可以非常輕量的切換 Go 版本。對比其他語言,通常也有類似的工具,如 NodeJS 的 NVM,Python 的 pyenv 等。在使用方法上和 Python 的多版本管理工具 pyenv 非常類似。

其實不借助類似的版本管理工具安裝多個版本 Go 也是可以自己手動實現的,做法很簡單,就是下載不同的 Golang 安裝包,然後放置到獨立的目錄,使用時將 GOROOT 和 GOPATH 指向對應版本的目錄即可完成版本切換。其實 gvm 原理上就是這麼做的,只不過通過工具的形式將這些繁雜的手工操作封裝起來,使得開發起來更加優雅,不必再爲 Go 的安裝、版本管理花費更多的心思。下面爲 gvm 的工作原理:
在這裏插入圖片描述

安裝

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

安裝可能遇到的坑:

$ gvm  install go1.12.10
Downloading Go source...
ERROR: Couldn't download Go source. Check the logs /Users/jim/.gvm/logs/go-download.log

根據提示看 log 報錯

Cloning into '/Users/jim/.gvm/archive/go'...
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

解決問題:vim ~/.gvm/scripts/install
修改 GO_SOURCE_URL 變量地址爲: GO_SOURCE_URL=git://github.com/golang/go

使用速記

1.列出當前已安裝的 Go 版本

gvm list

2.列出當前可以安裝的 Go 版本

gvm listall

3.安裝指定版本的 Go

gvm install go1.12.10

4.切換到指定的 Go 版本
臨時切換

gvm use go1.12

永久切換

gvm use go1.12 --default

參考資料

https://juejin.im/post/5d848b66f265da03a7160e89

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章