For example, in the Java world, libraries like jOOQ[1] make type-safe SQL construction a breeze and allow you to make your relational schema a "first-class citizen" of your app, versus a mere afterthought of how your ORM happens to represent them.
Or in the Scala world, there's a non-blocking MongoDB driver called ReactiveMongo[2].
Would love to hear how this compares to the Golang ecosystem.
Shameless plug over, please forgive me, but you did ask about Go and NoSQL.
"non-blocking" is kind of a funny concept in go, because since they have green threads, even what might seem blocking isn't "really" blocking. Not sure quite what you mean - do you really mean "using channels and goroutines as the interface" ?
The comment about Go's typing system not working well with NoSQL is certainly true. I find it's annoying working with JSON - similar problem - but the JSON tools have these nice ways of tagging your fields with the JSON fields for easy conversion. We might have to look at this with Aerospike.
I spent time with one company, LiquidM in Berlin, who rewrote a PHP production system ( that's not "muscular C developers" :-) and had a very, very positive experience. They told me their switchover to GoLang was incredible, with line counts reduced massively (like 3x) and performance up 10x and programmer productivity way up. I was trying to find a blog post about their experience, but nothing's coming up.
The most annoying problem with Go is its lack of performance compared to JVM (including probably Scala), where common operations are usually 2x ~ 3x faster runtime, in production. In my opinion, the GoLang people need to stop blaming their garbage collector, because even with GC off Go is far slower.
The GoLang argument is code is easier and funner to write, which is certainly true, and Go is still an evolving implementation.
Go's big thrust this year is solid support for ARM, likely so they can support Android well. I'm running Go on my Raspberry Pi2 (and my original Pis, but they only have one core so it seems a little dumb). It is a fun language.
The majority of Flywheel code is written in Go, a fact we mention only to dispel any remaining notion that Go is not a robust, production-ready language and runtime environment.
Ob"Fallacy of the excluded middle": you can get this kind of contextual information in emacs pretty easily.
foo, bar := someFunc(baz)
int(foo)
Most times the conversion does not work and I see a nice little error with the type of foo.