Saying that statically typed languages cannot be expressive is pure FUD. Go designers just didn't strike the right balance between features and minimalism, because they didn't care. Without its concurrency model, Go is not much.
Take a look at OCaml, or any ML variant language (aside from Rust, which is more C++ than ML in my opinion anyway) for that matter, for a static typed language with a good implementation of generic types.
I think you're comparing Rust to a language with ad-hoc polymorphism like C++ (where you pay for the somewhat simpler signatures with confusing template instantiation errors), and I'm very glad we didn't follow the C++ route. Rust's generics are very similar to those of Haskell.
The only major generics-related issue that is getting some significant thought is the ability to have the automatically derive the return type on top-level functions, which is not something that is common in other statically typed languages (only C++ and those with whole program type inference, which has its own set of drawbacks).
Concurrency in Go certainly is, the rest is not, definitely.
> its syntactic clumsiness and shortcomings (hipsters are blogging about) came from being statically typed, just admit it
That's the kind of dismissive and arrogant attitude I often hear from gophers. Doesn't make me want to be part of that community.
Have a look at the Cyclone language. It has generics,tagged unions and pattern matching AND it is statically typed.
https://cyclone.thelanguage.org/wiki/User%20Manual/
Saying that statically typed languages cannot be expressive is pure FUD. Go designers just didn't strike the right balance between features and minimalism, because they didn't care. Without its concurrency model, Go is not much.