-
Notifications
You must be signed in to change notification settings - Fork 844
advanced
This document describes more advanced ways of working with the VS Code Go extension.
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
}
}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.
- (Preferred) Adjust your
PATHorPathenvironment variable, and open VS Code with the adjusted environment variable, or - Use the Go extension's
"Go: Choose Go Environment"command that opens a menu to change thegoversion, or - Use the
"go.alternateTools"settings and specify the absolute path to thegocommand."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.
- the directory the
GOBINenvironment variable specifies, or - the
bindirectory under the firstGOPATH(or"go.gopath") directory, or - the
$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.
The extension uses pinned versions of command-line tools. See the pinned versions in tools information here. To use an alternate version of a tool install it manually with with go install.
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.
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.
✏️ Want to contribute to this wiki?
Update the source and send a PR.