# `gopls`, the Go language server [![PkgGoDev](https://pkg.go.dev/badge/golang.org/x/tools/gopls)](https://pkg.go.dev/golang.org/x/tools/gopls) `gopls` (pronounced "Go please") is the official Go [language server] developed by the Go team. It provides IDE features to any [LSP]-compatible editor. You should not need to interact with `gopls` directly--it will be automatically integrated into your editor. The specific features and settings vary slightly by editor, so we recommend that you proceed to the [documentation for your editor](#editors) below. ## Editors To get started with `gopls`, install an LSP plugin in your editor of choice. * [VS Code](https://github.com/golang/vscode-go/blob/master/README.md) * [Vim / Neovim](doc/vim.md) * [Emacs](doc/emacs.md) * [Atom](https://github.com/MordFustang21/ide-gopls) * [Sublime Text](doc/subl.md) * [Acme](https://github.com/fhs/acme-lsp) * [Lapce](https://github.com/lapce-community/lapce-go) If you use `gopls` with an editor that is not on this list, please send us a CL [updating this documentation](doc/contributing.md). ## Installation For the most part, you should not need to install or update `gopls`. Your editor should handle that step for you. If you do want to get the latest stable version of `gopls`, run the following command: ```sh go install golang.org/x/tools/gopls@latest ``` Learn more in the [advanced installation instructions](doc/advanced.md#installing-unreleased-versions). Learn more about gopls releases in the [release policy](doc/releases.md). ## Setting up your workspace `gopls` supports both Go module, multi-module and GOPATH modes. See the [workspace documentation](doc/workspace.md) for information on supported workspace layouts. ## Configuration You can configure `gopls` to change your editor experience or view additional debugging information. Configuration options will be made available by your editor, so see your [editor's instructions](#editors) for specific details. A full list of `gopls` settings can be found in the [settings documentation](doc/settings.md). ### Environment variables `gopls` inherits your editor's environment, so be aware of any environment variables you configure. Some editors, such as VS Code, allow users to selectively override the values of some environment variables. ## Support Policy Gopls is maintained by engineers on the [Go tools team](https://github.com/orgs/golang/teams/tools-team/members), who actively monitor the [Go](https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+label%3Agopls) and [VS Code Go](https://github.com/golang/vscode-go/issues) issue trackers. ### Supported Go versions `gopls` follows the [Go Release Policy](https://golang.org/doc/devel/release.html#policy), meaning that it officially supports the last 2 major Go releases. Per [issue #39146](https://go.dev/issues/39146), we attempt to maintain best-effort support for the last 4 major Go releases, but this support extends only to not breaking the build and avoiding easily fixable regressions. In the context of this discussion, gopls "supports" a Go version if it supports being built with that Go version as well as integrating with the `go` command of that Go version. The following table shows the final gopls version that supports a given Go version. Go releases more recent than any in the table can be used with any version of gopls. | Go Version | Final gopls version with support (without warnings) | | ----------- | --------------------------------------------------- | | Go 1.12 | [gopls@v0.7.5](https://github.com/golang/tools/releases/tag/gopls%2Fv0.7.5) | | Go 1.15 | [gopls@v0.9.5](https://github.com/golang/tools/releases/tag/gopls%2Fv0.9.5) | Our extended support is enforced via [continuous integration with older Go versions](doc/contributing.md#ci). This legacy Go CI may not block releases: test failures may be skipped rather than fixed. Furthermore, if a regression in an older Go version causes irreconcilable CI failures, we may drop support for that Go version in CI if it is 3 or 4 Go versions old. ### Supported build systems `gopls` currently only supports the `go` command, so if you are using a different build system, `gopls` will not work well. Bazel is not officially supported, but may be made to work with an appropriately configured `go/packages` driver. See [bazelbuild/rules_go#512](https://github.com/bazelbuild/rules_go/issues/512) for more information. You can follow [these instructions](https://github.com/bazelbuild/rules_go/wiki/Editor-setup) to configure your `gopls` to work with Bazel. ### Troubleshooting If you are having issues with `gopls`, please follow the steps described in the [troubleshooting guide](doc/troubleshooting.md). ## Additional information * [Features](doc/features.md) * [Command-line interface](doc/command-line.md) * [Advanced topics](doc/advanced.md) * [Contributing to `gopls`](doc/contributing.md) * [Integrating `gopls` with an editor](doc/design/integrating.md) * [Design requirements and decisions](doc/design/design.md) * [Implementation details](doc/design/implementation.md) * [Open issues](https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+label%3Agopls) [language server]: https://langserver.org [LSP]: https://microsoft.github.io/language-server-protocol/