VSCode gopls 多版本设置

最近开始使用vscode做go的开发,在开发过程中遇到了很多vscode的问题,譬如终端里面没有go的版本信息,是vscode和zsh在macOS上的配合问题。通过使用bash终端解决了这个问题。
然后解决了这个问题产生了另外一个问题,成功切换了go的版本,但是gopls的版本没有切换成功。我们工作过程中有很多比较低版本的go,不兼容最新的gopls。
本文就来介绍一下如何实现自动切换gopls的版本

1. 下载指定版本的gopls

go get golang.org/x/tools/gopls@v0.14.2 命令来下载指定版本的gopls

2. 查看gopls的存储位置

命令 which gopls 能够展示你的默认gopls所在的位置,上面的指定版本的gopls下载就会覆盖这个文件
比方说我的路径是在 ~/Developer/go/bin/gopls

3. 创建多版本的gopls版本目录

创建目录 "~/gopls/v0.14.2/,然后执行命令 cp ~/Developer/go/bin/gopls ~/gopls/v0.14.2/ 将对应版本的gopls版本写入到指定目录

4. 重复上面1-3步骤

通过重复1-3步,拿到你所使用的go版本支持的最高版本的gopls。
版本的对应关系可以参见这里:https://github.com/golang/tools/tree/master/gopls#support-policy
版本兼容性

最终文件夹的效果如下:
文件结构

5. 在工程中设置

在工程的根目录下创建 ./.vscode/setting.json, 写入下面的内容, 选择兼容的gopls版本

1
2
3
4
5
6
7
8
9
10
{
// 版本兼容性 https://github.com/golang/tools/tree/master/gopls#support-policy
"go.alternateTools": {
// "gopls": "~/gopls/v0.7.5/gopls" //go 1.12
// "gopls": "~/gopls/v0.9.5/gopls" //go 1.15
// "gopls": "~/gopls/v0.11.0/gopls" //go 1.17
"gopls": "~/gopls/v0.14.2/gopls" //go 1.18
// "gopls": "~/gopls/v0.15.3/gopls" //go 1.20
}
}

6. Enjoy