It was specifically design to disallow smart-asses to write ninja-code, so no. Go is for monkey programmer factories which managers want to make sure they will only code a certain way because Go doesn't give the developer choices. It's the anti C++,scala,python,clojure... Go tells you to do this that way, and doesn't give you the constructs or features to make your own choice about coding.
I know that doesn't sound fun but it makes maintenance so much easier.
In Scala, you basically have to learn the constructs and their semantics. No way around that. But once you do, almost everything is just various compositions. For the most part, it's very predictable. The execution model is ultimately pretty simple.
Consistency -- I'll give you that. There are a lot of options for how to structure your code. And when you start composing libraries together, you have to be able to understand the paradigms the authors use.
Operator stew, whether Scala or C/++, REALLY makes me appreciate the Lisp style of function calling. "Evaluate inner parentheses first. There is no step 2." Now you're trained in "operator" precedence, which, by the way, I have seen responsible for far more costly errors than runtime types. (I'm putting C's lack of any real type checking at all in a different level of problem - sometimes useful for systems stuff, but foolish for general biz apps)
Today, the story is much improved. SBT has been massively reformed, with insane operators deprecated.
Stat usage wise it makes Haskell look mainstream... but serious real world code is written in OCaml (I would argue maybe even more serious than Haskell :P ).
The users of OCaml almost always know how to parse really hard things to parse which is a pretty descent filter.
MirageOS sounds cool. What are people using it for?
by number of jobs, scala is way ahead, also python, javascript, ruby, java.
Even here, when jobs are listed, numbers of go jobs are quite low
This mattered much less in the past as ecosystems were much smaller and people tended to build software much more from the ground up.
That said, I think it applies within ecosystems still. Scala programmers get to choose a better language without abandoning the Java ecosystem. F# programmers get to choose a better language without abandoning the C# ecosystem. The "paradox" is evident there.
Go is definitely not that language (generics? lack of package management for years? c'mon). Rust, maybe (for systems programmers).
http://erlang.org/doc/apps/dialyzer/dialyzer_chapter.html
http://elixir-lang.org/getting-started/typespecs-and-behavio...
Not the same as TypeScript or Haskell, but may help.
Note that Erlang/Elixir programmers don't care about most runtime errors as we use Supervisors to restart processes that may crash because of them.
That doesn't give me a whole lot of comfort. A program that handles crashes gracefully doesn't fix its own mistake. Supervision is great, but it's even better to not have the crash in the first place.
Note that "practical" functional programming is something I just made up, but in general to me it means a language that provides immutable data, first class functions/higher order functions, and provides ways to minimize side effects. Elixir/Erlang do these. The language is geared towards functional programming, but it's impure.
But compare it to Haskell, a "pure" language: Elixir has no strong types, monads/functors/burritos, you can do side effects whenever you want with no penalty, there aren't many restrictions or things the compiler will yell you at about that aren't obvious mistakes.
I'm not saying either choice is better, but the average developer with little experience in both Elixir and Haskell can probably build a product faster in the former.