I like Go. I use it for a number of things (including this blog, at the time of writing). Go is useful. With that said, Go is not a good language. It's not bad; it's just not good.
We have to be careful using languages that aren't good, because if we're not careful, we might end up stuck using them for the next 20 years.
I've also included some comparisons to both Rust and Haskell (which I consider to be good languages). This is to show that all the problems listed here have already been solved.
We want to write code that we can use for lots of different things. If I write a function to sum a list of numbers, it would be nice if I could use it on lists of floats, lists of ints, and lists of anything else that can be summed. It would be extra nice if this code also maintained the type safety and speed of writing separate functions for adding lists of ints, lists of floats, etc.
I think the best generic programming system we have right now is what both Rust and Haskell use. This is often referred to as a system of "constrained types". In Haskell, this system is called "type classes", and in Rust it's called "traits". It works like this: