Gopls:Go 的语言服务器

PkgGoDev

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 团队 的工程师维护,他们积极监控 GoVS Code Go 的问题跟踪器。

支持的 Go 版本

gopls 遵循 Go 发布策略,这意味着它仅官方支持最新的两个主要 Go 发布版本。

在使用 gopls 时,有三个版本需要注意:

  1. gopls 构建的 Go 版本:用于构建 gopls 的 Go 版本。
  2. go 命令版本:gopls 执行的 go list 命令版本,用于加载关于您工作区的信息。
  3. 语言版本:当前文件的包含的 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 下找到。