博客上说是从 IDEA 的 go-lang-idea-plugin 发展起来的，有一个专门的团队已经埋头搞了三年了，目测比 VS Code + Go Plugin 靠谱，目前开始接受内测申请。
The goal of the GOPATH is to centralize all packages into one common workspace. It is not really a new concept by itself (think of the java classpath for example), but Go use in a drastically simple way by not supporting packages versionning. The Go programmer isn't suposed to set GOPATH manually when entering a new project folder. Each project folder is supposed to be a package by itself, and reside in the GOPATH along other packages, so GOPATH should be set only once. Tutorials begin by setting the GOPATH in order to isolate the tutorial workspace from anything other. GOROOT is set to provide the standard packages to the Go programmer, you don't need to do anything with it. To put it short, there is a single rule for GOROOT: never, ever, touch it. Don't install anything in it, don't modify standard packages, etc. I'm not aware of a tool to detect go projects in the current directory, but it shouldn't be highly complex to create. How you handle differents projects is up to you. The go way to do it is to put every project as a package in the $GOPATH/src dir and do everything from there. As I don't really like it, I defined my GOPATH to be $HOME/.go. Then I put each project in a dedicated directory somewhere else (anywhere in my computer), and symlink the project directory into my $GOPATH/src dir. I can then use every command compile as nothing, use the project as package for another one, etc.