| # Gopls on by default in the 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 the upcoming arrival of Go 1.16, 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 |
| walk-through of how to get started with `gopls` and VS Code Go, and see the |
| [VS Code Go README](https://github.com/golang/vscode-go/blob/master/README.md) |
| for additional information. |
| |
| 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). |