(Q2 2018:
Note that with the vgo project, GOPATH
might end up being deprecated in favor of a project-based workflow. That would avoid the manual project-based GOPATH
I was proposing below, two years ago)
With Go 1.11 (August 2018), GOPATH
can be optional, with modules.
It is more and more supported with VSCode:
In addition to vendor folder, you still can have one GOPATH
per project.
See "GOPATH
from go.inferGopath
setting":
GOPATH
from go.inferGopath
setting
Setting go.inferGopath
overrides all of the above.
If go.inferGopath
is set to true
, the extension will try to infer the GOPATH
from the path of the workspace i.e. the directory opened in vscode. It searches upwards in the path for the src
directory, and sets GOPATH
to one level above that.
For example, if your project looks like /aaa/bbb/ccc/src/...
, then opening the directory /aaa/bbb/ccc/src
(or anything below that) will cause the extension to search upwards, find the src
component in the path, and set the GOPATH
to one level above that i.e. GOPATH=/aaa/bbb/ccc
.
This setting is useful when you are working on different Go projects which have different GOPATH
s. Instead of setting the GOPATH
in the workspace settings of each project or setting all the paths as ;/:
separated string, you can just set go.inferGopath
to true
and the extension uses the right GOPATH
automatically.
GOPATH
for installing the Go tools using go.toolsGopath
By default, all the dependent Go tools are used from the GOPATH
derived from the above logic.
If they are available on your PATH
, the PATH
is used to locate the Go tools.
If the Go tools are not in your path, you might end up with the same Go tools installed in each of your GOPATH
s.
To prevent the Go tools from cluttering your GOPATH
, use the go.toolsGopath
setting to provide a separate location for the Go tools.
The first time you set go.toolsGopath, you will have to run Go: Install Tools
command so that the Go tools get installed in the provided location.