Essentially all of the quoted usecases switched from a slow dynamically typed language to Go. Of course that's an improvement. But I still don't see why you would choose Go over Java (or Scala) for serious backend development. Java has more libraries, is faster, has generics (for the love of god), has better IDE support, and has a larger hiring pool. In summary, the ecosystem is more mature. Java's checked exceptions…
1. Less verbose code
2. Platform Ind. + native binaries, no runtime dependency
3. Built in unit testing/benching
4. Fast compile time
5. Better tooling, no Ant etc needed
6. Better core language support for multithreading/concurrency
7. A memory model that makes it easier to read the code and understand how the resulting data will be layed out in memory
8. Related to 7, better stack vs heap allocation control
>Java has more librariesMany of which are of low quality / filled with code-rot, I used to play in the Java ecosystem the Go stdlib is cleaner and the Go 3rd party libraries tend to be better, more single function.
>is faster
This is not always the case and is changing for Go's better fast. To paint Go as non-competitive would be unfair as its in the same league as Java and it usually faster than C# Mono.
>has generics (for the love of god)
I used to miss this, but I find I don't anymore... I wrote proxies, databases, systems applications.
>has better IDE support
True. This used to pain me until I found LiteIDE and I started writing unit tests more and using the debugger less. Go's profiler is awesome though...
>and has a larger hiring pool.
Not really, any smart C/C++/C#/Java developer can be highly productive in Go in weeks.
>In summary, the ecosystem is more mature.
A double edged sword mind you, not to mention Go is maturing at faster rate then Java did.
>Java's checked exceptions are less painful then Go's C-style error handling.
No. C++/Java got it wrong, ignoring error paths lead or letting random low level errors bubble up are some of the horrible results of the Java way to handle exceptions.
Forcing programmers to consider which operations may fail- how to handle those failures is one of the best decisions Go made. Multiple returns make this much less painful than C.