Setting the GOPATH
variable global as an enviroment variable works fine with Visual Studio Code.
But setting a project specific variable globally doesn't seem very nice to me. Consider you have multiple Go
projects, you would have to change this variable each time you, compile, debug, ... etc. a project.
Is there a possibility to set the GOPATH
variable as a project variable in Visual Studio Code? Ether in settings.json
or launch.json
?
Go 1.5 added the vendor directory that allows a per-project dependency management.
If there is a source directory d/vendor, then, when compiling a source file within the subtree rooted at d, import "p" is interpreted as import "d/vendor/p" if that path names a directory containing at least one file with a name ending in “.go”.
This feature has been enabled by default with Go 1.6:
Go 1.5 introduced experimental support for a “vendor” directory that was enabled by an environment variable. In Go 1.6, the feature is now enabled by default.
Even with the 1.6 version, depending on the tools you use, you might need to set the GO15VENDOREXPERIMENT
environment variable to 1
(export GO15VENDOREXPERIMENT=1
on unix-based OS)
The GOPATH is your workspace and it's divided in
GOPATH/
|- bin/
|- pkg/
|- src/ <--- your projects are saved here
|- .../my_project1
|- .../my_project2
With this separation, your don't need to set a new GOPATH for each project. I recommend you read How to Write Go Code
(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
fromgo.inferGopath
settingSetting
go.inferGopath
overrides all of the above.
Ifgo.inferGopath
is set totrue
, the extension will try to infer theGOPATH
from the path of the workspace i.e. the directory opened in vscode. It searches upwards in the path for thesrc
directory, and setsGOPATH
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 thesrc
component in the path, and set theGOPATH
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 theGOPATH
in the workspace settings of each project or setting all the paths as;/:
separated string, you can just setgo.inferGopath
totrue
and the extension uses the rightGOPATH
automatically.
GOPATH
for installing the Go tools usinggo.toolsGopath
By default, all the dependent Go tools are used from the
GOPATH
derived from the above logic.
If they are available on yourPATH
, thePATH
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 yourGOPATH
s.
To prevent the Go tools from cluttering yourGOPATH
, use thego.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.
set workspace settings
, in windows:
ctrl+,
set workspace setting:
{
"go.gopath": "d:\\gopath;E:\\src"
}
use ;
for multiple path