GOPATH
The GOPATH
environment variable is a fundamental part of writing Go code before the introduction of Go modules. It specifies the location of your workspace, and it defaults to $HOME/go
. A GOPATH
directory contains src
, bin
, and pkg
directories. Your code is typically located in the $GOPATH/src
directory.
If you are not familiar with Go and GOPATH
, please first read about writing Go code with GOPATH
.
GOPATH
GOPATH
GOPATH
s for different projectsGOPATH
GOPATH
GOPATH
First, it's useful to quickly check that you are using the right GOPATH
. Two commands report the GOPATH
value used by the VS Code Go extension: (1) Go: Current GOPATH
, or (2) Go: Locate Configured Go Tools
. Use either of these commands to check which GOPATH
the extension is using.
If the GOPATH
value is incorrect, see the details below on how to configure it.
GOPATH
If you have chosen not to use Go modules, you will need to configure your GOPATH
. Modules have largely eliminated the need for a GOPATH
, so if you're interested in using them, taking a look at the modules documentation for the VS Code Go extension.
Setting GOPATH
is typically as simple as setting the environment variable once in your system‘s configuration. Take a look at the Setting GOPATH
Wiki page if you’re unsure how to do this.
By default, the extension uses the value of the environment variable GOPATH
. If no such environment variable is set, the extension runs go env
and uses the GOPATH
provided in that output.
Note that, much like a PATH
variable, GOPATH
can contain multiple directory paths, separated by :
or ;
. This allows you to set different GOPATH
s for different projects.
Still, there are a number of cases in which you might want a more complicated GOPATH
set-up. This document will explain how to configure and manage your GOPATH
within the VS Code Go extension.
GOPATH
s for different projectsSetting go.gopath
in your user settings overrides the environment's GOPATH
value.
Workspace settings override user settings, so you can use the go.gopath
setting to set different GOPATH
s for different projects. A GOPATH
can also contain multiple directories, so this setting is not necessary to achieve this behavior.
GOPATH
NOTE: This feature only works in GOPATH
mode, not in module mode.
The go.inferGopath
setting overrides the go.gopath
setting. If you set go.inferGopath
to true
, the extension will try to infer your GOPATH
based on the workspace opened in VS Code. This is done by searching for a src
directory in your workspace. The parent of this src
directory is then added to your global GOPATH
(go env GOPATH
).
For example, say your global GOPATH
is $HOME/go
, but you are working in a repository with the following structure.
foo/ └── bar └── src └── main.go
If you open the foo
directory as your workspace root in VS Code, "go.inferGopath"
will set your GOPATH
to $HOME/go:/path/to/foo/bar
.
This setting is useful because it allows you to avoid setting the GOPATH
in the workspace settings of each of your projects.
GOBIN
If you find yourself frequently switching between GOPATH
s, you may have found that the extension prompts you to install tools for every GOPATH
. You can resolve this by making sure your tool installations are on your PATH
, or you can configure a separate directory for tool installation: GOBIN
. This environment variable tells the go
command where to install all binaries. Configure it by setting:
"go.toolsEnvVars": { "GOBIN": "path/to/gobin" }
GOPATH
NOTE: The following is only relevant if you are using a Go version that does not support Go modules, that is, any version of Go before 1.11.
Before Go 1.11, the go get
command installs tools and their source code to your GOPATH
. Because this extension uses a lot of different tools, this can clutter up your GOPATH
. If you wish to reduce this clutter, you can have the extension install tools do a different location. This also addresses the issue described above, when switching GOPATHs
forces you to reinstall Go tools.
This can be done via the "go.toolsGopath"
setting. Use it to specify an alternate directory that the extension can use to install tools. After you set this value, be sure to run the Go: Install/Update Tools
command so that the Go tools get installed to the provided location.
The extension will fall back to your existing GOPATH
if tools are not found in the go.toolsGopath
directory.