This document describes more advanced ways of working with the VS Code Go extension.
The extension chooses the go
command using the PATH
(or Path
) environment variable by default. You can configure the extension to choose a different version of go
with one of the following options.
PATH
or Path
environment variable, and open VS Code with the adjusted environment variable, or"Go: Choose Go Environment"
command that opens a menu to change the go
version, or"go.alternateTools"
settings and specify the absolute path to the go
command. "go.alternateTools": { "go": "/path/to/go/command" }
note: For historical reasons, some users configure the "go.goroot"
settings or the GOROOT
environment variable to select the Go SDK location. With recent versions of Go, that's unnecessary in most cases.
The Go: Install/Update Tools
command uses the go get
command to download and install requested tools. By default, go get
will install the compiled tools in one of the following directories.
GOBIN
environment variable specifies, orbin
directory under the first GOPATH
(or "go.gopath"
) directory, or$HOME/go/bin
(or $USERPROFILE/go/bin
) directory.Some users prefer to choose a different installation location. In that case, use the "go.toolsGopath"
setting.
The extension finds the required tools by their names (go
, gopls
, dlv
, etc.). The "go.alternateTools"
setting provides a way to configure the extension to use different tool location, for example a wrapper with a different name.
A commonly customized feature is the linter, which is the tool used to provide coding style feedback and suggestions. This extension supports linters such as staticcheck
, golangci-lint
, and revive
. You can choose one of them using the "go.lintTool"
setting. For customization of the linter, please consult the linter's documentation.
Note that if you are using staticcheck
, you can enable it to run within gopls
by setting "gopls": { "ui.diagnostic.staticcheck": true }
.
This extension can be used for developing the standard library with additional configuration.
First, you must open the src/
folder in VS Code, not the Go tree root. (See golang/go#32394.)
Then, you need to configure the workspace, by placing the following in src/.vscode/settings.json
. Command Palette -> Preferences: Open Workspace Settings (JSON)
will open the settings file.
{ // Use the local go tool. This needs to be built with make.bash. "go.alternateTools": { "go": "~/godev/bin/go" }, // // Below is optional. // // Build a separate set of tools. For golang/vscode-go#294. "go.toolsGopath": "~/.vscode/godev", // Don't reformat HTML files since we have a custom style. "html.format.enable": false }
The above assumes the Go tree is checked out at ~/godev
. If your Go tree is somewhere else, modify go.alternateTools.go
to point to the go binary accordingly. Many underlying tools including gopls
invoke the go command (go list
, etc), so we assume the binary isn't completely broken.
You can add .vscode
to .git/info/exclude
to avoid risking checking settings.json
into git.
If you see an “inconsistent vendoring” error, please report it at golang/go#40250.
When you have multiple formatter extensions, be sure to set this extension as the default formatter for go language.
"[go]": { "editor.defaultFormatter": "golang.go" }
Formatting and organizing imports are enabled by default. You can choose to disable them by configuring the following settings.
"[go]": { "editor.formatOnSave": false, "editor.codeActionsOnSave": { "source.organizeImports": false } }