# Gopls on by default in VS Code Go extension
01 Feb 2021
Tags: tools, gopls
Summary: Gopls, which provides IDE features for Go to many editors, is now used by default in VS Code Go.

Go tools team

##

We're happy to announce that the VS Code Go extension now enables the [gopls
language server](https://github.com/golang/tools/blob/master/gopls/README.md)
by default, to deliver more robust IDE features and better support for Go
modules.

.image gopls/features.gif _ 635
_(`gopls` provides IDE features, such as as intelligent autocompletion, signature help, refactoring, and workspace symbol search.)_

When [Go modules](using-go-modules) were
released two years ago, they completely changed the landscape of Go developer
tooling. Tools like goimports and godef previously depended on the fact that
code was stored in your `$GOPATH`. When the Go team began rewriting these tools
to work with modules, we immediately realized that we needed a more systematic
approach to bridge the gap.

As a result, we began working on a single Go
[language server](https://microsoft.github.io/language-server-protocol/),
`gopls`, which provides IDE features, such as autocompletion, formatting, and
diagnostics to any compatible editor frontend. This persistent and unified
server is a [fundamental
shift](https://www.youtube.com/watch?v=EFJfdWzBHwE&t=1s) from the earlier
collections of command-line tools.

In addition to working on `gopls`, we sought other ways of creating a stable
ecosystem of editor tooling. Last year, the Go team took responsibility for the
[Go extension for VS Code](https://blog.golang.org/vscode-go). As part of this
work, we smoothed the extension’s integration with the language server—automating
`gopls` updates, rearranging and clarifying `gopls` settings, improving the
troubleshooting workflow, and soliciting feedback through a survey. We’ve also
continued to foster a community of active users and contributors who have
helped us improve the stability, performance, and user experience of the Go
extension.

## Announcement

January 28 marked a major milestone in both the `gopls` and VS Code Go
journeys, as `gopls` is now enabled by default in the Go extension for VS Code.

In advance of this switch we spent a long time iterating on the design, feature
set, and user experience of `gopls`, focusing on improving performance and
stability. For more than a year, `gopls` has been the default in most plugins for
Vim, Emacs, and other editors. We’ve had 24 `gopls` releases, and we’re
incredibly grateful to our users for consistently providing feedback and
reporting issues on each and every one.

We’ve also dedicated time to smoothing the new user experience. We hope that VS
Code Go with `gopls` will be intuitive with clear error messages, but if you have
a question or need to adjust some configuration, you’ll be able to find answers
in our [updated documentation](https://github.com/golang/vscode-go/blob/master/README.md).
We have also recorded [a screencast](https://www.youtube.com/watch?v=1MXIGYrMk80)
to help you get started, as well as
[animations](https://github.com/golang/vscode-go/blob/master/docs/features.md)
to show off some hard-to-find features.

Gopls is the best way of working with Go code, especially with Go modules.
With Go 1.16 arriving soon, in which modules are enabled by default, VS Code
Go users will have the best possible experience out-of-the-box.

Still, this switch does not mean that `gopls` is complete. We will continue
working on bug fixes, new features, and general stability. Our next area of
focus will be improving the user experience when [working with multiple
modules](https://github.com/golang/tools/blob/master/gopls/doc/workspace.md).
Feedback from our larger user base will help inform our next steps.

## So, what should you do?

If you use VS Code, you don’t need to do anything.
When you get the next VS Code Go update, `gopls` will be enabled automatically.

If you use another editor, you are likely using `gopls` already. If not, see
[the `gopls` user guide](https://github.com/golang/tools/blob/master/gopls/README.md)
to learn how to enable `gopls` in your preferred editor. The Language Server
Protocol ensures that `gopls` will continue to offer the same features to every
editor.

If `gopls` is not working for you, please see our [detailed troubleshooting
guide](https://github.com/golang/vscode-go/blob/master/docs/troubleshooting.md)
and file an issue. If you need to, you can always [disable `gopls` in VS
Code](https://github.com/golang/vscode-go/blob/master/docs/settings.md#gouselanguageserver).

## Thank you

To our existing users, thank you for bearing with us as we rewrote our caching
layer for the third time. To our new users, we look forward to hearing your
experience reports and feedback.

Finally, no discussion of Go tooling is complete without mentioning the
valuable contributions of the Go tools community. Thank you for the lengthy
discussions, detailed bug reports, integration tests, and most importantly,
thank you for the fantastic contributions. The most exciting `gopls` features
come from our passionate open-source contributors, and we are appreciative of
your hard work and dedication.

## Learn more

Watch [the screencast](https://www.youtube.com/watch?v=1MXIGYrMk80) for a full
explanation of how to get started with `gopls` and VS Code Go.

See the [VS Code Go README](https://github.com/golang/vscode-go/blob/master/README.md)
for additional information on getting started with the Go extension for VS
Code.

If you’d like to read about `gopls` in more detail, see the
[`gopls` README](https://github.com/golang/tools/blob/master/gopls/README.md).
