不同的工程使用的 go sdk 是不一樣的,為了避免線上和開發機結果不一致,需要把開發機的 sdk 版本設置成和打包機一致。GoLand IDE 里面很好處理,只要下載 go sdk zip 或者 .tar.gz 壓縮包的版本,然后解壓,IDE 里面對於不同的工程選擇不同的 sdk 文件夾就好了。命令行需要用工具手動切換,會麻煩一些。
1 推薦的方案
如果你可以接受
全局切換 go sdk,
選擇方案1。如果你需要
不同 shell 進程使用不同的 go sdk,選擇方案2。
1.1 方案1:voidint / g
如果可以接受全局切換 go sdk,建議使用這個方案。
特性:
- go 寫的
- 支持 windows 系統,通過 NTFS Junction Points 實現 link,所以不會遇到權限問題。
- 支持 arm64 mac
- 支持設置 mirror,可以設置鏡像為 https://golang.google.cn/dl/ ,然后就可以在牆內流暢下載 go sdk 了。
- 看了下代碼,下載完成之后,會檢查 checksum。
- 是通過爬蟲直接檢索 golang 官網獲取版本信息的,所以不需要每次 go sdk 發布新版本,這個軟件也更新到新版本。
- 因為是通過把符號鏈接直接改了,所以改完會對所有的 shell 進程生效。也就是說,這個修改是全局的。
1.2 方案2:自己下載官網上的 .tar.gz 或者 .zip 壓縮包,然后解壓處理
如果想要一個 shell 一個 go sdk 版本,可以使用這個方案。
優點:
- 不同的 shell 進程可以使用不同的 go sdk 版本,無窮高的靈活度。windows 下面的 powershell 似乎也能一個 shell 進程設置一個環境變量。
- 可以自行從 google cn 下載壓縮包,所以不會遇到各種連接問題。
- 出新的版本,立刻就能從官網下載到。官網改版后,使用爬蟲抓取網頁獲取鏈接的那些工具會掛掉,但是自己下載沒問題。
- 不需要安裝第三方工具。
缺點:
- 操作起來實在是太麻煩了。
注意,不要下載 .msi, .pkg 這種安裝包,這種一台電腦只能安裝一個版本。應該使用 .zip, .tar.gz 壓縮包,自己解壓縮。
國內可以使用下面的地址下載,不會出現連不上的問題: https://golang.google.cn/dl/
macOS 系統可以按照下面的步驟操作:
openssl sha256 ${file}
3. 移除 com.apple.quarantine 來解決 GateKeeper 阻止應用運行的問題:
xattr -rd com.apple.quarantine ${file_or_directory}
4. 解壓縮
5. 把解壓縮后的文件移動到 ~/sdk/ 目錄下面
6. 修改 shell 配置文件,加上手動切換 go sdk 的 function
PATH_BASE="$PATH"
function use_go_1_17_4 () {
export GOROOT="${HOME}/sdk/go1.17.4"
export PATH="$GOROOT/bin:${PATH_BASE}"
}
function use_go_1_14_1 () {
export GOROOT="${HOME}/sdk/go1.14.1"
export PATH="$GOROOT/bin:${PATH_BASE}"
}
# 設置為默認使用 go 1.14.1
use_go_1_14_1
在 shell 里面切換 go 版本。
# 終端執行這個命令,會把當前 shell 切換到 1.17.4
use_go_1_17_4
# 終端執行這個命令,會把當前 shell 切換到 1.14.1
use_go_1_14_1
2 不推薦的方案
下面的方案都需要連接 golang 的國外官網,所以,你懂的。
特性:
- go 寫的
- 不支持使用 https://golang.google.cn/dl/ 鏡像
- 沒有說是否支持 windows。但是鑒於 windows 的 NTFS symbolic link 的權限限制,作者沒有做特殊處理的話,應該是不支持的
- 不支持 arm64 mac
2.2 moovweb / gvm
特性
- shell 寫的
- 不支持使用 https://golang.google.cn/dl/ 鏡像
- 最初設計是用來管理 go path 項目的,而不是只管理 go sdk 的版本。所以功能過於復雜
- 沒有說是否支持 windows。
- mac 系統下安裝還需要 command line tools & mercurial,非常麻煩。
2.3 syndbg / goenv
特性
- shell 寫的
- 不支持使用 https://golang.google.cn/dl/ 鏡像
- 沒有說是否支持 windows。
2.4 asdf-vm / asdf
特性
- shell 寫的
- 不支持使用 https://golang.google.cn/dl/ 鏡像
- 沒有說是否支持 windows。
2.5 go 官方方案: Managing Go installations
特性
- 需要先下載一個 go sdk,然后才能安裝其他版本,所以會遇到先有雞還是先有蛋的問題。
- 不支持使用 https://golang.google.cn/dl/ 鏡像
- go 命令會加上版本號后綴,這樣 shell script, Makefile 使用 go 的地方會遇到問題
- 支持 windows 系統
- 支持 arm64 mac
