I have been tinkering with Go for a couple months and I've been so impressed with it I'm about to start a real production server using it. It has all the low-level functionality of C with some very useful features added, like garbage collection, string manipulation, new data types like slices and channels, and of course threading.<p>The main downside is that there are not a lot of libraries available. If you want to use the language you will find yourself using 3rd party wrappers off github of unknown quality, and you will probably have to wrap some C libraries yourself, because no one else has.<p>Also, both the garbage collection and the goroutine scheduler could use some work. Like most other garbage-collected languages, Go's GC has to stop all threads in the program while it does its work, causing milliseconds of lag. This makes the language unsuitable for realtime work like a fast-paced video game.<p>The goroutine scheduler works using a fixed-size thread pool. You have to tell it how many threads to use - by default programs are single-threaded. It has no ability to lower the thread count when the system is under heavy load, or to raise the thread count when most threads are unproductively waiting on network IO.<p>Despite these minor problems it is amazingly full-featured for a compiled language, and amazingly fast for a full-featured language. They are actively working on improving the garbage collection and they plan to improve the thread scheduler.
Any idea why Go uses tabs for formatting? (A google search didn't provide the answer but did suggest I may want to find out why God does!)<p>About the only good pro-tab stance I have seen is that it allows the viewer to choose a level they prefer, but I would expect consistency would be far better.
The Go language seems to have some substantial documentation, which is great. Though, throughout, the code snippets would look better with some syntax highlighting.