| # Features |
| |
| This document describes the features supported by this extension. |
| |
| ## Table of Contents |
| |
| * [IntelliSense](#intellisense) |
| * [Code completion](#code-completion) |
| * [Signature help](#signature-help) |
| * [Quick info on hover](#quick-info-on-hover) |
| * [Code Navigation](#code-navigation) |
| * [Go to definition](#go-to-definition) |
| * [Go to symbol](#go-to-symbol) |
| * [Find references](#find-references) |
| * [Find interface implementations](#find-interface-implementations) |
| * [Document outline](#document-outline) |
| * [Toggle between code and tests](#toggle-between-code-and-tests) |
| * [Code Editing](#code-editing) |
| * [Snippets](#snippets) |
| * [Format and organize imports](#format-and-organize-imports) |
| * [Add import](#add-import) |
| * [Rename symbol](#rename-symbol) |
| * [Refactor](#refactor) |
| * [Code Generation](#code-generation) |
| * [Add or remove struct tags](#add-or-remove-struct-tags) |
| * [Generate interface implementation](#generate-interface-implementation) |
| * [Generate unit tests](#generate-unit-tests) |
| * [Fill struct literals](#fill-struct-literals) |
| * [Diagnostics](#diagnostics) |
| * [Build errors](#build-errors) |
| * [Vet errors](#vet-errors) |
| * [Lint errors](#lint-errors) |
| * [Run and test in the editor](#run-and-test-in-the-editor) |
| * [Run your code](#run-your-code) |
| * [Test and benchmark](#test-and-benchmark) |
| * [Code coverage](#code-coverage) |
| * [Debug your code](#debugging) |
| * [Other](#other) |
| * [Go Playground](#go-playground) |
| |
| ## [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense) |
| |
| ### Code completion |
| |
| Completion results appear for symbols as you type. You can trigger this manually with the Ctrl+Space shortcut. |
| |
| Autocompletion is also supported for packages you have not yet imported into your program. |
| |
| <div style="text-align: center;"><img src="images/completion-signature-help.gif" alt="Code completion and signature help" style="width: 75%"> </div> |
| |
| ### Signature help |
| |
| Information about the signature of a function pops up as you type in its parameters. |
| ### Quick info on hover |
| |
| Documentation appears when you hover over a symbol. |
| |
| ## [Code Navigation](https://code.visualstudio.com/docs/editor/editingevolved) |
| |
| ### Go to definition |
| |
| Jump to or peek a symbol's declaration. |
| |
| <div style="text-align: center;"><img src="images/gotodefinition.gif" alt="Go to definition using the context menu" style="width: 75%"> </div> |
| |
| ### Find references |
| |
| Find or go to the references of a symbol. |
| |
| This feature is not available if you are using Go modules **without** [`gopls`](gopls.md), the Go language server. |
| |
| <div style="text-align: center;"><img src="images/findallreferences.gif" alt="Find references using the context menu" style="width: 75%"> </div> |
| |
| ### Find interface implementations |
| |
| Find the concrete types that implement a given interface. |
| |
| This feature is not available if you are using Go modules **without** [`gopls`](gopls.md), the Go language server. |
| |
| <div style="text-align: center;"><img src="images/implementations.gif" alt="Go to implementations for Server that implements http.Handler and then finds all implementations of http.Handler in the workspace" style="width: 75%"> </div> |
| |
| ### [Go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-symbol) |
| |
| Search for symbols in your file or workspace by opening the Command Palette (Ctrl+Shift+P) and typing `@` for symbols in the current file or `#` for symbols in the entire workspace. |
| |
| <div style="text-align: center;"><img src="images/workspace-symbols.gif" alt="Use Workspace Symbols to locate Hello in the workspace" style="width: 75%"> </div> |
| |
| ### Call hierarchy |
| |
| Show all calls from or to a function. |
| |
| <div style="text-align: center;"><img src="images/callhierarchy.gif" alt="Show call hierarchy and investigate callers of a function" style="width: 75%"> </div> |
| |
| ### Document outline |
| |
| See all the symbols in the current file in the VS Code's [Outline view](https://code.visualstudio.com/docs/getstarted/userinterface#_outline-view). |
| |
| <div style="text-align: center;"><img src="images/outline.png" alt="Outline of a Go file" style="width: 75%"> </div> |
| |
| ### Toggle between code and tests |
| |
| Quickly toggle between a file and its corresponding test file by using the [`Go: Toggle Test File`](commands.md#go-toggle-test-file) command. |
| |
| <div style="text-align: center;"><img src="images/toggletestfile.gif" alt="Toggle between reverse.go and reverse_test.go" style="width: 75%"> </div> |
| |
| ## Code Editing |
| |
| ### [Snippets](https://code.visualstudio.com/docs/editor/userdefinedsnippets) |
| |
| Predefined snippets for quick coding. These snippets will appear as completion suggestions when you type. Users can also define their own custom snippets (see [Snippets in Visual Studio Code](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets)). |
| |
| <div style="text-align: center;"><img src="images/snippets-tys.gif" alt="Use the struct type snippet" style="width: 75%"> </div> |
| |
| ### Format and organize imports |
| |
| Format code and organize imports, either manually or on save. |
| |
| #### Add import |
| |
| Manually add a new import to your file through the [`Go: Add Import`](commands.md#go-add-import) command. Available packages are offered from your `GOPATH` and module cache. |
| |
| <div style="text-align: center;"><img src="images/addimport.gif" alt="Add byte import to Go file" style="width: 75%"> </div> |
| |
| |
| ### [Rename symbol](https://code.visualstudio.com/docs/editor/refactoring#_rename-symbol) |
| |
| Rename all occurrences of a symbol in your workspace. |
| |
| **Note**: For undo after rename to work on Windows, you need to have `diff` tool on your `PATH`. |
| |
| This feature is not available if you are using Go modules **without** [`gopls`](gopls.md), the Go language server. |
| |
| <div style="text-align: center;"><img src="images/rename.gif" alt="Rename an exported variable in Go workspace" style="width: 75%"> </div> |
| |
| |
| ### Refactor |
| |
| Select the area for refactoring (e.g. variable, function body, etc). Click on the Code Action light bulb icon |
| that appears in the selected area, or select "Refactoring..." or "Rename Symbol" from the VS Code Context menu. |
| For known issues with this feature see [golang/go#37170](https://github.com/golang/go/issues/37170). |
| |
| <div style="text-align: center;"><img src="images/extract-variable.gif" alt="Extract to variable followed by a rename" style="width: 75%"> </div> |
| |
| ## Code Generation |
| |
| ### Add or remove struct tags |
| |
| Use the [`Go: Add Tags to Struct Fields`](commands.md#go-add-tags-to-struct-fields) command to automatically generate or remove [tags](https://pkg.go.dev/reflect?tab=doc#StructTag) for your struct. This feature is provided by the [`gomodifytags`](tools.md#gomodifytags) tool. |
| |
| <div style="text-align: center;"><img src="images/addtagstostructfields.gif" alt="Add tags to struct fields" style="width: 75%"> </div> |
| |
| ### Generate interface implementation |
| |
| Use the [`Go: Generate Interface Stubs`](commands.md#go-generate-interface-stubs) command to automatically generate method stubs for a given interface. This feature is provided by the [`impl`](tools.md#impl) tool. |
| |
| <div style="text-align: center;"><img src="images/generateinterfaceimplementation.gif" alt="Generate functions to implement an interface" style="width: 75%"> </div> |
| |
| ### Generate unit tests |
| |
| Easily generate unit tests for your project by running one of the [`Go: Generate Unit Tests for ...`](commands.md#go-generate-unit-tests-for-file) commands. This can be done at a function, file, or package level. This feature is provided by the [`gotests`](tools.md#gotests) tool. |
| |
| <div style="text-align: center;"><img src="images/generateunittestsforfunction.gif" alt="Generate unit tests for a function" style="width: 75%"> </div> |
| |
| ### Fill struct literals |
| |
| Use the [`Go: Fill struct`](commands.md#fill-struct) command to automatically fill a struct literal with its default values. |
| |
| <div style="text-align: center;"><img src="images/fillstructliterals.gif" alt="Fill struct literals" style="width: 75%"> </div> |
| |
| ## Diagnostics |
| |
| Learn more about [diagnostic errors](tools.md#diagnostics). |
| |
| ### Build errors |
| |
| Build errors can be shown as you type or on save. Configure this behavior through the [`"go.buildOnSave"`](settings.md#go.buildOnSave) setting. |
| |
| By default, code is compiled using the `go` command (`go build`), but build errors as you type are provided by the [`gotype-live`](tools.md#diagnostics) tool. |
| |
| ### Vet errors |
| |
| Vet errors can be shown on save. The vet-on-save behavior can also be configured through the [`"go.vetOnSave"`](settings.md#go.vetOnSave) setting. |
| |
| The vet tool used is the one provided by the `go` command: [`go vet`](https://golang.org/cmd/vet/). |
| |
| ### Lint errors |
| |
| Much like vet errors, lint errors can also be shown on save. This behavior is configurable through the [`"go.lintOnSave"`](settings.md#go.lintOnSave) setting. |
| |
| The default lint tool is [`staticcheck`]. However, custom lint tools can be easily used instead by configuring the [`"go.lintTool"`](settings.md#go.lintTool) setting. [`golint`], [`golangci-lint`], and [`revive`] are also supported. |
| |
| For a complete overview of linter options, see the [documentation for diagnostic tools](tools.md#diagnostics). |
| |
| ## Run and test in the editor |
| |
| ### Run your code |
| |
| To run your code without debugging, use the keyboard shortcut `Ctrl+F5` or run the command `Debug: Start without Debugging`. To debug, see [Debugging](#debugging) below. |
| |
| This command requires you to have a [launch configuration](debugging.md#launch-configuration) in a `launch.json` file. To open or create your `launch.json`, run the `Debug: Open launch.json` command. Use the default `Go: Launch file` configuration. |
| |
| Behind the scenes, the `Debug: Start without Debugging` command calls `go run`. `go run` usually requires the path to the file to run, so your `launch.json` should contain `"program": "${file}"`. |
| |
| ### Test and benchmark |
| |
| [Test UI](https://code.visualstudio.com/api/extension-guides/testing) and [Code lenses](https://code.visualstudio.com/blogs/2017/02/12/code-lens-roundup) allow users to easily run tests and benchmarks for a given function, file, package, or workspace. Alternatively, the same functionality is available through a set of commands: [`Go: Test Function At Cursor`](commands.md#go-test-function-at-cursor), [`Go: Test File`](commands.md#go-test-file), [`Go: Test Package`](commands.md#go-test-package), and [`Go: Test All Packages in Workspace`](commands.md#go-test-all-packages-in-workspace). |
| |
| <div style="text-align: center;"><img src="images/testexplorer.gif" alt="Testing UI" style="width: 75%"> </div> |
| |
| ### Code Coverage |
| |
| Show code coverage in the editor, either after running a test or on-demand. This can be done via the commands: [`Go: Apply Cover Profile`](commands.md#go-apply-cover-profile) and [`Go: Toggle Test Coverage in Current Package`](commands.md#go-toggle-test-coverage-in-current-package). |
| |
| ## [Debugging](debugging.md) |
| |
| This extension offers debugging of Go programs. See the [debugging documentation](debugging.md) for more information. |
| |
| ## Other |
| |
| ### Go Playground |
| |
| Export your current file to the [Go Playground](https://play.golang.org) via the [`Go: Run On Go Playground`](settings.md#go-run-on-go-playground) command. This is useful for quickly creating a piece of sample code. |
| |
| [`gopls`]: gopls.md |
| [`staticcheck`]: https://staticcheck.io/ |
| [`golint`]: https://pkg.go.dev/golang.org/x/lint/golint?tab=overview |
| [`golangci-lint`]: https://golangci-lint.run/ |
| [`revive`]: https://github.com/mgechev/revive |