This screencast might help: http://www.youtube.com/watch?v=XCsL89YtqCs
As it is stated in the screencast, a programmer needs to add the workspace to $GOPATH to be able to build the source. That means that for each project being developed in Go, you need to add the path to that project to $GOPATH to be able to build it.
That is a very poor way to do develop software.
Personally, I keep 2; one for external packages, and one for ones I'm working on.
Go code is nothing if not explicit.
For a company, it makes sense to check your GOPATH into your own source control system, so everyone has the same version of the open source libraries you're using. Then upgrading some open source libraries to a new version is a commit like any other change.
I haven't messed with Go, but nothing about the idea of defining a path for source modules sounds braindead on its face to me. I certainly would give the benefit of any doubt to the designers of Go over some random troll.
How is that different than the /I ${INCLUDE} path of C/C++ compilers (and many other languages)?
What you meant to say was, their braindead idea was that if you want to be able to trivially use ANY go program or library on GitHub, you can use $GOPATH and the go tool [1] and not fuck around with autotools and makefiles.
If you're into S&M, no one is stopping you from using the core pieces of the `go` tool by hand.
[1]: ALL of my code can be download, built and run with: `go get github.com/myname/myproject; myproject` (I have $GOPATH/bin on my path)
Referring to gc makes as much sense as referring to gccgo.
If you want to do your own thing, you're free to ignore the rest of the community in this respect, and create your own build mechanism. In fact, if you pass the "-x" flag to the go tool, you can even see how its accomplishing what its accomplishing; which might help you write this better build tool.