$GOPATH must not be set to $GOROOT, why not?

Because /usr/local/go/src already contains the code for the standard library, and you should keep your own code separate from that.

I know, other development tools would have no problem with that, but Go is a little more strict in some ways. It's probably the same philosophy that lies behind flagging unused variables or imports as errors - avoiding problems which may seem small at first, but can lead to bigger headaches in the future.


Add following lines to your .bashrc file:

export GOPATH="${HOME}/workspace"
export GOROOT="${HOME}/go"
export PATH="${GOPATH}/bin:${PATH"}

Then load the bashrc: $ source .bashrc


From go help gopath:

GOPATH must be set to get, build and install packages outside the standard Go tree.

Thus, GOROOT sets the location of standard library, and GOPATH is for nonstandard libraries. One library should not be at both locations at once.