From r60 to Go 1
gophersays.com
gophersays.com
1. language designed with good intentions (http://golang.org/doc/go_faq.html#What_is_the_purpose_of_the...)
2. designed and built by a group of veteran system researchers and engineers (ie. not javascript)
3. implementation open sourced from the start: http://code.google.com/p/go/source/browse
4. not overdesigned (http://golang.org/doc/go_faq.html#Design)
5. a real and practical abstraction for multicore computing (http://www.usingcsp.com/cspbook.pdf)
Its success, like most languages, will depend on library support. Here's hoping it catches on.
By that measure Go's standard library is very extensive: http://weekly.golang.org/pkg/
There are also a lot of 3rd party packages (e.g., http://godashboard.appspot.com/package) most of which can be installed in a single command.
For my purposes, Go's standard library has proved as complete as Python's (http://docs.python.org/library/index.html) and includes some things that the Python standard library doesn't (e.g., crypto, graphics), all the more impressive IMO considering how relatively young Go is.
That and Go reaching a 1.0 release may help me get it considered for some projects at work.
More detailed info here: http://weekly.golang.org/doc/go1.html
I'm not sure of the value of unions now or ever as it brings what is effectively a compiler decision into user space and allows very unsafe, architecture dependent code to be accidentally written.
They Go App Engine team have also very recently pushed out beta releases that are tracking the weekly Go releases leading up the final Go 1 release, so I think it's safe to say that Go will be officially supported on App Engine not too long after Go 1 is released.
Manual labor to write them that a build system could automate for you.
Not convenient enough for large projects, so people write makefile-making tools anyway.
It turns out a mess.
It looks intriguing but I can't think of any obvious immediate applications (I'm sure there are plenty, I just don't see them).
I chose it because the native code interface is so nice, so it's trivial to use libraries like ZeroMQ without the overhead you'd see out of something like JNI.
Go makes it very easy to communicate between nodes, almost as easy as what you can do in Erlang. Doozer is a library in Go for coordination of the activities of many machines, a lot like Zookeeper. Between Doozer and Netchan, Go is a really solid choice for making a system like a world simulator that needs to be distributed among many computers.
Go is also better than Node.js for things that require manipulating binary data. For example, I have some communications back and forth where the server is in Go, the client is in Python, and they talk using Protocol Buffers. Javascript doesn't do binary (at all? not very well?) like Go or Java can. There is an experimental protocol buffer library in Javascript, but in general Javascript needs to kind of bend over backwards to work with binary data. It's possible to do it, but it's not natural or efficient.
In general, if you care about memory usage, working with binary data, tons of simultaneous threads/actors, building distributed systems, then Go is a great choice, especially if you want to do more than one of the above.
+1 on memory usage. OOM is a killer for long running apps (pun intended)
A straight line by line port (ie less idiomatic Go) runs at about twice the speed of Python and with the same memory footprint. With the right fine tuning should be even better.
It was also very easy to do -- i.e code translated quite easily from Python to Go.
I am also using it for HTTP request reconstruction and retransmission in real-time to enable live-data and full load testing of pre-production code.