Setting `GOPATH` for each vscode project
Setting `GOPATH` for each vscode project
Setting the GOPATH
variable global as an enviroment variable works fine with Visual Studio Code.
GOPATH
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.
Go
Is there a possibility to set the GOPATH
variable as a project variable in Visual Studio Code? Ether in settings.json
or launch.json
?
GOPATH
settings.json
launch.json
GOPATH
vendor
4 Answers
4
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”.
source
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.
source
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)
GO15VENDOREXPERIMENT
1
export GO15VENDOREXPERIMENT=1
In addition to vendor folder, you still can have one GOPATH per project.
See "GOPATH
from go.inferGopath
setting":
GOPATH
go.inferGopath
GOPATH
go.inferGopath
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.
go.inferGopath
go.inferGopath
true
GOPATH
src
GOPATH
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
.
/aaa/bbb/ccc/src/...
/aaa/bbb/ccc/src
src
GOPATH
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
GOPATH
;/:
go.inferGopath
true
GOPATH
GOPATH
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.
GOPATH
PATH
PATH
GOPATH
GOPATH
go.toolsGopath
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.
Go: Install Tools
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
This is not very sufficient when you have a solution with different projects of different languages.
– Matthias Lochbrunner
Nov 21 '16 at 9:06
What do you mean with different languages? GOPATH is only your workspace for yours golang projects. If you're using other languages, they're not affected by GOPATH env variable. If you're taking about versioning, the vendor directory is your solution.
– Motakjuq
Nov 21 '16 at 9:22
Consider you are writing applications of many microservices each and in each one of them is written in
Go
the others in C++
, JavaScript
, whatever... . Then your workspace tree looks strange...– Matthias Lochbrunner
Nov 21 '16 at 12:28
Go
C++
JavaScript
set workspace settings
, in windows:
workspace settings
ctrl+,
set workspace setting:
{
"go.gopath": "d:gopath;E:src"
}
use ;
for multiple path
;
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
don't try to change
GOPATH
for each project, usevendor
folder– n00dl3
Nov 21 '16 at 8:56