概述

因为有很多个项目要维护,同时因为这些项目的历史背景不一,有些可能是自己写的,有些是从别人那接过来的,所以,目前面临的一个问题就是 Go 版本可能不一致,但是,你又不敢冒冒然地就升级成一致的版本,毕竟测试的覆盖度还不足以给我信心这么做。

所以,当前阶段我还是先维持使用项目指定的 Go 版本,所以就有了在本地使用多个 Go 版本的需求。本文虽然说的是 Mac 环境,但是,实际上在 Linux 环境应该也是想通的。

通过 brew 管理多套环境

  1. [root@liqiang.io]# brew install go # 1.17
  2. [root@liqiang.io]# brew install go@1.15
  3. [root@liqiang.io]# brew unlink go
  4. [root@liqiang.io]# brew link go@1.15

指定版本运行代码

不想设置全局的固定版本,你也可以通过指定路径来运行不同的版本。

但是需要注意 GOPATH 这个环境变量,如果你不同版本的 Go 使用同个 GOPATH 的话,高版本一旦更新了依赖的库,那么低版本的就没法用了,很重要

  1. [root@liqiang.io]# GOPATH=/Users/liqiang.io/Applications/srcs/gopath1.14 \
  2. /Users/liqiang.io/Applications/srcs/go1.14.6/bin/go test cmd/server/main*

Goland 设置多版本

Goland 默认支持不同的 Go 版本,而且还可以帮你下载:

图 1:打开设置页面
图 2:选择 Go 的版本

如果你觉得还不够,那么可以让 Goland 帮你下载一个:

图 3:下载按钮
图 4:版本选择

各种版本任你选择。

GOPATH

但是,同样别忘记了切换了 Go 版本之后要选择不同的 GOPATH:

图 5:设置 GOPATH

VSCode

VSCode 支持多版本 Go 其实也很简单,和 Goland 差不多,但是不同的是,VSCode 常用的方式都是通过配置文件来管理:

  1. 在项目目录下创建 .vscode 目录
  2. .vscode 目录下创建 settings.json 文件
  1. [root@liqiang.io]# cat settings.json
  2. {
  3. "go.goroot": "/home/liqiang/software/goroot/go1.18",
  4. "go.gopath": "/home/liqiang/software/gopath/gopath1.18",
  5. "go.toolsEnvVars": {
  6. "GO111MODULE": "on",
  7. "GOROOT": "/home/liqiang/software/goroot/go1.18",
  8. "GOPATH": "/home/liqiang/software/gopath/gopath1.18",
  9. },
  10. "terminal.integrated.profiles.linux": {
  11. "zsh": {
  12. "path": "/usr/bin/zsh",
  13. "env": {
  14. "GOROOT": "/home/liqiang/software/goroot/go1.18",
  15. "GOPATH": "/home/liqiang/software/gopath/gopath1.18",
  16. }
  17. }
  18. },
  19. "terminal.integrated.defaultProfile.linux": "zsh"
  20. }