Windows 下 Golang 多版本管理

小白要生髮發表於2020-10-10

當前 golang 各個版本還是有些許不相容,最近遇到 go-micro 框架只能執行在 go 1.13 ~ 1.14 版本,而我Windows 下安裝的又是 1.15,所以這時就需要安裝 其他版本的golang,那麼多版本 golang 如何在 Windows 上共存呢。

如果你在以下操作過程中,發現命令不生效,可以新開一個命令列視窗進行重試。

接下來會給大家介紹我嘗試過的 4 種方案。 最好的方案是第四個,第一、三個方案失敗了。

建目錄 改 PATH

在Windows 安裝好 golang,在 cmd 通過執行

$ go verstion
go version go1.15.2 windows/amd64

因為在 PATH 變數中配置了 gobin目錄, 所以在 cmd 能直接執行 go.exe

那麼可不可以在不刪除原有golang的情況下,新建立一個資料夾 C:\Go1.13 來存放我們新版本 golang。

執行新下載的安裝程式

a

選擇 Uninstall ,沒關係,我們已經把 PATH 去掉了,他找不到刪除目錄的。

輸入我們給他配置的新目錄

安裝後,我傻眼了,其他檔案都安裝在 C:\Go1.13 裡,而這個卻安裝在了 C:\Go 目錄裡

而之前安裝的 Go1.15.2 被解除安裝了。我就想建立個目錄 C:\Go1.15.2,來重新安裝 go 1.13.14, 我都把 PATH 刪除了,它還是找到檔案並刪除了。

ab

所以通過多個目錄安裝不同版本golang的辦法是行不通的。

go get

這個是官方建議

# 還能 get 其他版本的golang
$ go get golang.org/dl/go1.15.2

# 下載這一步不能少
$ go1.15.2 download

# 檢查下吧
$ go1.15.2 version
go version go1.15.2 windows/amd64

# 預設的 golang 版本
$ go version
go version go1.13.14 windows/amd64

新安裝的 go1.15.2.exe%USERPROFILE%\go\bin 目錄下.

注意以上以上方法需要訪問 google 的服務,所以你懂的。

你不僅要設定 http代理,還需要設定 git 的全域性代理!

gvm

gvm

以下命令均在 git bash 環境執行,不是 windows cmd 環境!

本文地址

安裝

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

# 代理訪問
$ bash < <(curl -x socks5://james:cats@myproxy.com:8080 -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

Cloning from https://github.com/moovweb/gvm.git to /c/Users/wojia/.gvm
Created profile for existing install of Go at C:\Users\wojia\.g\go
Installed GVM v1.0.22

Please restart your terminal session or to get started right away run
 `source /c/Users/w/.gvm/scripts/gvm`

最後一行提示我們新開一個 terminal, 並執行命令 source /c/Users/w/.gvm/scripts/gvm , 我們來看看裡面有什麼動作。

$ cat /c/Users/w/.gvm/scripts/gvm

export GVM_ROOT=/c/Users/w/.gvm
. $GVM_ROOT/scripts/gvm-default

這顯然是一個配置指令碼。

配置

在 Windows 新增 GVM_ROOT 環境變數後,看看這個配置指令碼。

cat $GVM_ROOT/scripts/gvm-default
unset GOROOT
unset GOARCH
unset GOOS
unset GOPATH
unset GOBIN

unset gvm_go_name
unset gvm_pkgset_name

mkdir -p "$GVM_ROOT/logs" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/gos" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/archive" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/archive/package" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/environments" > /dev/null 2>&1

export GVM_VERSION=$(cat "$GVM_ROOT/VERSION")
export PATH="$GVM_ROOT/bin:$PATH"
export GVM_PATH_BACKUP="$PATH"
[ -f "$GVM_ROOT/environments/default" ] && . "$GVM_ROOT/environments/default"
. "$GVM_ROOT/scripts/env/gvm"

也就是說需要配置 環境變數: GVM_VERSIONGVM_PATH_BACKUP, PATH

使用

配置好後,試一下。

$ gvm install go1.4
C:\Users\w\.gvm/scripts/functions: line 3: C:\Users\w\.gvm/scripts/function/*: No such file or directory

看來 shell 指令碼沒有針對 Windows 做調整,看來 gvm 沒有對 Windows 做相容。

g

最後來看看 g

安裝

windows 的話,就直接上 github release 頁面下載目標檔案:

直接將解壓後的 g.exe 放入 PATH 目錄下即可

$ g -v
g version 1.2.0

# 安裝成功!

配置

針對 Windows 需要 將原有的 C:/Go/binPATH 中移除,新增 %USERPROFILE%\.g\go\bin

如果 Goland import 有報錯,就需要調整下 GOROOT, GOPATH 配置

abc

這裡需要調整為 C:\Users\w\.g\go 目錄。

使用

查詢當前可供安裝的stable狀態的go版本

$ g ls-remote stable
  1.13.15
  1.14.7

安裝目標go版本1.14.7

$ g install 1.14.7
Downloading 100% |███████████████| (119/119 MB, 9.939 MB/s) [12s:0s]
Computing checksum with SHA256
Checksums matched
Now using go1.14.7

查詢已安裝到本地的 go版本

$ g ls
  1.7.6
  1.11.13
  1.12.17
  1.13.15
  1.14.6
* 1.14.7

查詢可供安裝的所有go版本

$ g ls-remote
  1
  1.2.2
  1.3
  1.3.1
  ...    // 省略若干版本
  1.14.5
  1.14.6
* 1.14.7
  1.15rc1

切換到另一個已安裝的go版本

$ g use 1.14.6
go version go1.14.6 darwin/amd64

解除安裝一個已安裝的go版本

$ g uninstall 1.14.7
Uninstalled go1.14.7

總結

就目前(2020年10月)來看,gWindows 上最好的 golang 多版本管理軟體,golang 的官方方案也不錯,不過執行go命令需要加版本號,容易和 shell指令碼耦合。

gvm 還未適配 Windows。 而多開資料夾,改PATH就是個笑話了,大家圖個樂。

參考

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章