So, this gopher came to my ~, s*** on my lawn, and built a fence around it, as if it was theirs. There's gotta be a better way to bring home a (Go)pher.

Travesty

The Golang mascot sitting on the lawn in front of a house

Installing Go unceremoniously creates ~/go. Worse, it takes sudo to rm -rf the directory due to permission issues. Thankfully, it doesn't pollute ~/.zshrc/~/.bashrc with PATH additions, but that leaves Go's binaries (~/go/bin) out in the cold.

Solution

The GOPATH environment variable specifies the location of your workspace. It defaults to a directory named go inside your home directory, so $HOME/go on Unix, $home/go on Plan 9, and %USERPROFILE%\go (usually C:\Users\YourName\go) on Windows.

I use ~/.go instead of ~/go by setting the $GOPATH environment variable to $HOME/go before installation.

~/.zshrc

# Use `~/.go` instead of `~/go` for Golang.
export GOPATH="$HOME/.go"

Then I add ~/.go/bin to my PATH so I can use go installed binaries like lipo.

~/.zshrc

# Add Go binaries to the path.
export PATH=$PATH:~/.go/bin

With those additions, reload .zshrc for the changes to take effect.

$ source ~/.zshrc

Install Go

Go's installation docs recommend downloading a package file, but I use a brew formula so things stay up-to-date.

Bonus: Avoid Name Collisions

Installing the Go version of lipo collides with MacOS's lipo.

$ go install github.com/konoui/lipo@latest` 
$ where lipo
/usr/bin/lipo
/Users/goingforbrooke/.go/bin/lipo

This means that lipo will only call MacOS's lipo (/usr/bin/lipo). The Go version of lipo's still accessible with its full path (/Users/goingforbrooke/.go/bin/lipo), but that's irritating to type.

To avoid calling the wrong lipo, create a softlink in a directory on PATH, such as ~/bin/.

$ ln -s ~/.go/bin/lipo ~/bin/golipo

That made a softlink called golipo in ~/bin, as ls -l can show us.

$ ls -l bin/golipo
lrwxr-xr-x 24 goingforbrooke  4 Feb 42:42 bin/golipo -> /Users/flow/.go/bin/lipo

Again, source ~/.zshrc for the changes to take effect.

Now the Go version of lipo is accessible via golipo.

$ where golipo
/Users/goingforbrooke/bin/golipo