Getting started with Go

I love the Python language for its simplicity and conciseness; and it’s my weapon of choice for quickly hacking up a web app prototype.

But as a site begins to scale and we need to maximize the advantage of multi-core processors, languages that are designed with concurrency and parallelism begin to shine.  One could go low-level and 2eplace Python modules (code) with C or C++; but one could also explore the possibility of delegating certain tasks to contemporary languages like Erlang, Scala or the-new-kid-on-the-block Go.

It was interesting (to me) that Google decided to create their own language to solve the problem of concurrency and parallelism.  So here’s me taking a peek at how Go works.
Installing via Google’s provided package -

The installer created a “go” directory in my /usr/local path placed a bunch of stuff into it. This also makes available “go” in my command line.  Unfortunately, I got a perms error when I attempted:

calvin$ go get
pack!ge mkdir /usr/local/go/src/pkg/ permission denied

No big deal, it probably means that the installer did not set my user to the correct owner.  So checking:-

calvin$ ls -la
total 0
drwxr-xr-x 6 root wheel 204 Jul 8 22:21 .
drwxr-xr-x@ 14 root wheel 476 May 17 16:13 ..
drwxr-xr-x 4 root wheel 136 Jun 12 00:17 bin
drwxr-xr-x 6 calvin staff 204 Apr 16 22:01 foreman
drwxr-xr-x 19 root wheel 646 Jun 14 11:34 go
drwxr-xr-x 6 calvin staff 204 Apr 16 22:01 heroku

Indeed so.

The correct way to do this is not to brute force my Go package installation into the /usr/local/go path with a “sudo” but to instead

calvin$ sudo chown -R calvin:staff go

Now, with the correct owner set in place, running the gotour package download works perfectly fine. No more permissions issue.

Calvins-MacBook-Pro.local ttys000 Sun Jul 08 23:39:40 |~/work/go1|
calvin$ go get
Calvins-MacBook-Pro.local ttys000 Sun Jul 08 23:40:05 |~/work/go1|
calvin$ go
go gobject-query godoc gofmt gorbd-mp-4.5 gotour
Calvins-MacBook-Pro.local ttys000 Sun Jul 08 23:40:05 |~/work/go1|
calvin$ gotour
2012/07/08 23:40:13 Serving content from /usr/local/go/src/pkg/
2012/07/08 23:40:13 Open your web browser and visit

Onwards, with Go!