19 November 2009


I'm a sucker for learning languages. So when Google released Go I jumped in and gave it a look. There's some interesting things in there, part C, part Limbo, part amalgam of new and old and new-old old-new. (Pick where GC and CSP go in that mix.)

Now, there are some growing pains; the "core" language packages include a myriad of fairly functional tools: hmac, json, http server and client, etc. Enough for me to spend a day or so putting together a quick Twitter-OAuth web app in Go.

Some warts: the documentation isn't quite there yet in some places, but it's growing; the http client doesn't support https or specifying headers in its public methods; but not big complaints as things are settling in -- those are library issues and they'll get sorted.

On the language itself: my main beefs are that (1) it doesn't support non-nullable types (yet? there's an open discussion on it.) and (2) it's a mix of statements and expressions (if is not an expression; it does not return a value). And again a bit of hard-to-find documentation, spread across a FAQ, a Tutorial, an "Effective Go" page, a Language Design FAQ, a Tech talk, and a "Language Specification" document. Most of the important bits are out there (if you also search through the growing mailing list as well as read the source code) but still some things which are a combination of hard-to-find and hard-to-guess. Like: how interface() and func() really work; how func types work; some of the edges.

Still, a good mental workout to remember how to use a C-like language; static compilation, linking, pointers, structs, etc. I had used Objective-C in the not-too-terribly distant past to put together a couple of iPhone prototype apps, but much of that is Apple's development environment holding your hand; not so much with a pleasant return-to-hacking-in-vi roots as a couple of days with Go. But it's not ready (not surprisingly at day 10 or whatever it is) for my needs, putting together a real website for BULL SPEC, and while it has a few bits which make it perhaps the best of the C-alikes so far, there's too much missing in it which Python, Scheme, OCaml, Haskell, Erlang, or Smalltalk provide that there's enough nits that add up in the core language that while it has been a fun diversion, I'm not sure I'll be spending a lot of time on Go in the near future.

No comments: