Features

This document describes the features supported by this extension.

If you are using the Go language server, gopls, please the gopls documentation instead. (You can check if you are using gopls by opening your VS Code settings and checking if "go.useLanguageServer" is true.)

If you are using Go modules without the language server, some of the features listed below will not be available.

Table of Contents

IntelliSense

Code completion

Completion results appear for symbols as you type. You can trigger this manually with the Ctrl+Space shortcut. This feature is provided by the gocode tool.

Autocompletion is also supported for packages you have not yet imported into your program. This feature is provided by the gopkgs tool.

Signature help

Information about the signature of a function pops up as you type in its parameters. This feature is provided by the gogetdoc tool, but it can also be provided by a combination of godef and godoc (configured via the "go.docsTool" setting).

Quick info on hover

Documentation appears when you hover over a symbol. This feature is provided by the gogetdoc tool, but it can also be provided by a combination of godef and godoc (configured via the "go.docsTool" setting).

Code Navigation

Go to definition

Jump to or peek a symbol's declaration. This feature is provided by the gogetdoc tool, but it can also be provided by a combination of godef and godoc (configured via the "go.docsTool" setting).

Find references

Find or go to the references of a symbol. This feature is provided the guru tool.

This feature is not available if you are using Go modules without gopls, the Go language server.

Find interface implementations

Find the concrete types that implement a given interface. This feature is provided by the guru tool.

This feature is not available if you are using Go modules without gopls, the Go language server.

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.

This feature is provided by the go-outline and go-symbols tools.

Document outline

See all the symbols in the current file in the VS Code's Outline view.

This feature is provided by the go-outline tool.

Toggle between code and tests

Quickly toggle between a file and its corresponding test file by using the Go: Toggle Test File command.

Code Editing

Snippets

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).

Format and organize imports

Format code and organize imports, either manually or on save. The code is formatted by the gofmt tool, which is the standard for Go code. Imports are added automatically to your file via the goimports tool, which is also an industry standard. By default, this extension also uses the goreturns tool, which automatically fills in default return values for functions.

The behavior of the formatter can be configured via the "go.formatTool" tool setting. The troubleshooting guide gives more details and explains how to disable formatting entirely.

Add import

Manually add a new import to your file through the Go: Add Import command. Available packages are offered from your GOPATH and module cache.

Rename symbol

Rename all occurrences of a symbol in your workspace. This feature is provided by the gorename tool.

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, the Go language server.

Refactor

Extract a piece of code to a local variable or to its own function using the Go: Extract to variable and Go: Extract to function commands. These features are provided by the godoctor tool. These features do not work with Go modules, but they will be supported by gopls in the future (see golang/go#37170).

Code Generation

Add or remove struct tags

Use the Go: Add Tags to Struct Fields command to automatically generate or remove tags for your struct. This feature is provided by the gomodifytags tool.

Generate interface implementation

Use the Go: Generate Interface Stubs command to automatically generate method stubs for a given interface. This feature is provided by the impl tool.

Generate unit tests

Easily generate unit tests for your project by running one of the Go: Generate Unit Tests for ... commands. This can be done at a function, file, or package level. This feature is provided by the gotests tool.

Fill struct literals

Use the Go: Fill struct command to automatically fill a struct literal with its default values. This command is provided by the fillstruct.

Diagnostics

Learn more about diagnostic errors.

Build errors

Build errors can be shown as you type or on save. Configure this behavior through the "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 tool.

Vet errors

Vet errors can be shown on save. The vet-on-save behavior can also be configured through the "go.vetOnSave" setting.

The vet tool used is the one provided by the go command: go vet.

Lint errors

Much like vet errors, lint errors can also be shown on save. This behavior is configurable through the "go.lintOnSave" setting.

The default lint tool is the one provided by the go command: go lint. However, custom lint tools can be easily used instead by configuring the "go.lintTool" setting. staticcheck, golangci-lint, and revive are supported.

For a complete overview of linter options, see the documentation for diagnostic tools.

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 below.

This command requires you to have a 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

Code lenses 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, Go: Test File, Go: Test Package, and Go: Test All Packages in Workspace.

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 and Go: Toggle Test Coverage in Current Package.

Debugging

This extension offers debugging of Go programs. See the debugging documentation for more information.

Other

Go Playground

Export your current file to the Go Playground via the Go: Run On Go Playground command. This is useful for quickly creating a piece of sample code.