Gopls:Go 的语言服务器
gopls
(发音为“Go please”)是 Go 官方的 语言服务器,由 Go 团队开发。它为任何 LSP 兼容编辑器提供了广泛的 IDE 功能。
您通常不需要直接与 gopls
交互,它会自动集成到您的编辑器中。具体的功能和设置因编辑器而异,因此我们建议您继续查看下面的 编辑器的文档。此外,gopls 关于每个功能的文档会描述其在每个客户端编辑器中是否受支持。
本文档(https://golang.ac.cn/gopls)描述了 gopls 的最新发布版本。要预览开发中版本的文档,请访问 https://tip.golang.org/gopls。
功能
Gopls 支持广泛的标准 LSP 功能,涵盖导航、补全、诊断、分析和重构,以及一些其他语言服务器中没有的附加功能。
请参阅 功能索引,了解 Gopls 能为您做些什么的完整文档。
编辑器
要开始使用 gopls
,请在您选择的编辑器中安装一个 LSP 插件。
如果您使用的编辑器不在这个列表中,但仍在使用 gopls
,请发送一个 CL 更新此文档。
安装
要安装 gopls
的最新稳定版本,请运行以下命令
go install golang.org/x/tools/gopls@latest
某些编辑器(如 VS Code)会自动处理此步骤,并确保在发布新稳定版本时 Gopls 得到更新。
更新后,您可能需要重新启动正在运行的 Gopls 进程才能看到效果。每个客户端都有其重启服务器的方式。(在 UNIX 系统上,您可以使用命令 killall gopls
。)
在 高级安装说明 中了解更多信息。
发布
Gopls 的 发布版本 遵循 语义化版本控制,重大更改和新功能仅在新小版本中引入(即形式为 v*.N.0
的版本,其中 N 为某个数字)。后续的补丁版本仅包含精选的修复或表面更新。
为了与 Go 发布周期 对齐,我们计划根据下表,大约每三个月发布一个新的 Gopls 小版本,补丁版本大约每月发布一次。
月份 | 版本(s) |
---|---|
一月 | v*.<N+0>.0 |
一月-三月 | v*.<N+0>.* |
四月 | v*.<N+1>.0 |
四月-六月 | v*.<N+1>.* |
七月 | v*.<N+2>.0 |
七月-九月 | v*.<N+2>.* |
十月 | v*.<N+3>.0 |
十月-十二月 | v*.<N+3>.* |
有关此策略的更多背景信息,请参阅 https://golang.ac.cn/issue/55267。
设置工作区
gopls
支持 Go module、多 module 和 GOPATH 模式。请参阅 工作区文档,了解支持的工作区布局信息。
配置
您可以配置 gopls
来改变您的编辑器体验或查看额外的调试信息。配置选项将通过您的编辑器提供,因此请参阅您的 编辑器的说明 以获取具体细节。gopls
设置的完整列表可以在 设置文档 中找到。
环境变量
gopls
继承您编辑器的环境,因此请注意您配置的任何环境变量。某些编辑器(如 VS Code)允许用户选择性地覆盖某些环境变量的值。
支持策略
Gopls 由 Go tools 团队 的工程师维护,他们积极监控 Go 和 VS Code Go 的问题跟踪器。
支持的 Go 版本
gopls
遵循 Go 发布策略,这意味着它仅官方支持最新的两个主要 Go 发布版本。
在使用 gopls 时,有三个版本需要注意:
- gopls 构建的 Go 版本:用于构建 gopls 的 Go 版本。
- go 命令版本:gopls 执行的 go list 命令版本,用于加载关于您工作区的信息。
- 语言版本:当前文件的包含的 go.mod 文件中的 go 指令版本,它决定了文件的 Go 语言语义。
从 2024 年 8 月发布 Go 1.23.0 和 gopls@v0.17.0 开始,我们将仅支持最新的 Go 版本作为gopls 构建的 Go 版本。然而,由于 Go 1.21 中添加的 向前兼容性 支持,只要使用 Go 1.21 或更高版本安装 gopls,任何必需的工具链升级都将自动处理,就像任何其他依赖项一样。
此外,从 gopls@v0.17.0 开始,go 命令版本将从 4 个版本缩小到 3 个。这与 Go 发布策略更加一致。
Gopls 支持所有 Go 版本作为其语言版本,通过提供基于语言版本的编译器错误以及根据该 Go 版本可用的标准库 API 过滤可用标准库符号。
维护对使用旧版本 Go 构建 gopls 的支持给 gopls 维护者带来了重大阻碍,并阻碍了其他改进。如果您无法在您的系统上安装受支持的 Go 版本,您仍然可以安装一个旧版本的 gopls。下表显示了支持给定 Go 版本的最后一个 gopls 版本。比表中版本更新的 Go 发布版本可以使用任何版本的 gopls。
Go 版本 | 最终支持的 gopls 版本(无警告) |
---|---|
Go 1.12 | gopls@v0.7.5 |
Go 1.15 | gopls@v0.9.5 |
Go 1.17 | gopls@v0.11.0 |
Go 1.18 | gopls@v0.14.2 |
Go 1.20 | gopls@v0.15.3 |
支持的构建系统
gopls
目前仅支持 go
命令,因此如果您使用不同的构建系统,gopls
可能无法很好地工作。Bazel 不受官方支持,但通过一个配置正确的 go/packages 驱动程序 可能会起作用。有关更多信息,请参阅 bazelbuild/rules_go#512。您可以按照这些说明配置您的 gopls
以与 Bazel 配合使用。
故障排除
如果您在使用 gopls
时遇到问题,请遵循 故障排除指南 中描述的步骤。
其他信息
本文档的源代码可以在 golang.org/x/tools/gopls/doc 下找到。