Important Note: If you have recently upgraded to Go 1.8 or Go 1.9, you may need to run gocode close
in your terminal and rebuild gocode
to ensure Go completion lists continue to work correctly. See microsoft#441.
Read the Release Notes to know what has changed over the last few versions of this extension
This extension adds rich language support for the Go language to VS Code, including:
- Completion Lists (using
gocode
) - Signature Help (using
gogetdoc
orgodef
+godoc
) - Snippets
- Quick Info (using
gogetdoc
orgodef
+godoc
) - Goto Definition (using
gogetdoc
orgodef
+godoc
) - Find References (using
guru
) - References CodeLens
- File outline (using
go-outline
) - Workspace symbol search (using
go-symbols
) - Rename (using
gorename
. Note: For Undo after rename to work in Windows you need to havediff
tool in your path) - Build-on-save (using
go build
andgo test
) - Lint-on-save (using
golint
orgometalinter
) - Format (using
goreturns
orgoimports
orgofmt
) - Generate unit tests skeleton (using
gotests
) - Add Imports (using
gopkgs
) - Add/Remove Tags on struct fields (using
gomodifytags
) - Semantic/Syntactic error reporting as you type (using
gotype-live
) - Run Tests under the cursor, in current file, in current package, in the whole workspace (using
go test
) - Generate method stubs for interfaces (using
impl
) - [partially implemented] Debugging (using
delve
)
First, you will need to install Visual Studio Code. Then, in the command palette (cmd-shift-p
) select Install Extension
and choose Go
.
In a terminal window with the GOPATH environment variable set to the GOPATH you want to work on, launch code
. Open your GOPATH folder or any subfolder you want to work on, then open a .go
file to start editing. You should see Analysis Tools Missing
in the bottom right, clicking this will offer to install all of the Go tooling needed for the extension to support its full feature set. See the Tools section below for more details.
Note 1: Read GOPATH in the VS Code Go extension to learn about the different ways you can get the extension to set GOPATH.
Note 2: Users may want to consider turning Auto Save
on in Visual Studio Code ("files.autoSave": "afterDelay"
) when using this extension. Many of the Go tools work only on saved files, and error reporting will be more interactive with Auto Save
turned on. If you do turn Auto Save
on, you may also want to turn format-on-save off ("go.formatOnSave": false
), so that it is not triggered while typing.
Note 3: This extension uses gocode
to provide completion lists as you type. To provide fresh results, including against not-yet-built dependencies, the extension uses gocode
's autobuild=true
setting. If you experience any performance issues with autocomplete, you should try setting "go.gocodeAutoBuild": false
in your VS Code settings.
The Go extension is ready to use on the get go. If you want to customize the features, you can edit the settings in your User or Workspace settings. Read Settings for Visual Studio Code Go extension for the full list of options and their descriptions.
Set go.useLanguageServer
to true
to use the Go language server from Sourcegraph for features like Hover, Definition, Find All References, Signature Help, Go to Symbol in File and Workspace.
- This is an experimental feature and is not available in Windows yet.
- If set to true, you will be prompted to install the Go language server. Once installed, you will have to reload VS Code window. The language server will then be run by the Go extension in the background to provide services needed for the above mentioned features.
- Everytime you change the value of the setting
go.useLanguageServer
, you need to reload the VS Code window for it to take effect. - To collect traces, set
"go.languageServerFlags": ["-trace"]
- To collect errors from language server in a logfile, set
"go.languageServerFlags": ["-trace", "-logfile", "path to a text file that exists" ]
A linter is a tool giving coding style feedback and suggestions. By default this extension uses the official golint as a linter.
You can change the default linter and use the more advanced Go Meta Linter
by setting go.lintTool
to "gometalinter" in your settings.
Go meta linter uses a collection of various linters which will be installed for you by the extension.
Some of the very useful linter tools:
- errcheck checks for unchecked errors in your code.
- varcheck finds unused global variables and constants.
- deadcode finds unused code.
If you want to run only specific linters (some linters are slow), you can modify your configuration to specify them:
"go.lintFlags": ["--disable-all", "--enable=errcheck"],
Alternatively, you can use megacheck which
may have significantly better performance than gometalinter
, while only supporting a subset of the tools.
Finally, the result of those linters will show right in the code (locations with suggestions will be underlined), as well as in the output pane.
In addition to integrated editing features, the extension also provides several commands in the Command Palette for working with Go files:
Go: Add Import
to add an import from the list of packages in your Go contextGo: Current GOPATH
to see your currently configured GOPATHGo: Test at cursor
to run a test at the current cursor position in the active documentGo: Test Package
to run all tests in the package containing the active documentGo: Test File
to run all tests in the current active documentGo: Test Previous
to run the previously run test commandGo: Test All Packages in Workspace
to run all tests in the current workspaceGo: Generates unit tests for package
Generates unit tests for the current packageGo: Generates unit tests for file
Generates unit tests for the current fileGo: Generates unit tests for function
Generates unit tests for the selected function in the current fileGo: Install Tools
Installs/updates all the Go tools that the extension depends onGo: Add Tags
Adds configured tags to selected struct fields.Go: Remove Tags
Removes configured tags from selected struct fields.Go: Generate Interface Stubs
Generates method stubs for given interface
You can access all of the above commands from the command pallet (Cmd+Shift+P
or Ctrl+Shift+P
).
Few of these are available in the editor context menu as an experimental feature as well. To control which of these commands show up in the editor context menu, update the setting go.editortorContextMenuCommands
To use the debugger, you must currently manually install delve
. See the Installation Instructions for full details. On OS X it requires creating a self-signed cert to sign the dlv
binary.
For more read Debugging Go Code Using VS Code
To remote debug using VS Code, read Remote Debugging
You can set up a development environment for debugging the extension during extension development. Read more at Building, Debugging and Sideloading the extension in Visual Studio Code
This extension uses a host of Go tools to provide the various rich features. These tools are installed in your GOPATH by default. If you wish to have the extension use a separate GOPATH for its tools, provide the desired location in the setting go.toolsGopath
. Read more about this and the tools at Go tools that the Go extension depends on