I tried to use it but felt it was so slow to write your ideas that programming got boring (no advanced loops/generators, no list comprehensions, lambda functions aren't used very much IIRC). I'd probably stick with Python unless performance matters.
It is "boring" -- absolutely. It is almost insanely so at times (even when solving complex problems). The number of times you get to feel insanely clever is very low.
But, that output / work product is -- and a huge part of Go's value is around the EDGES of a system (build, standard formatting, deploys, etc)
It's a bit strange to complain about lack of use for "lambda functions" in a language where there's a keyword that generally accepts a function reference, most often a function literal? (This keyword coincidentally is the language name lower-cased.)
WRT generators: have you tried using channels? "The tour of Go" seems to instill you with the idea that you should not iterate over lists and use channels instead.
I also miss list comprehensions and, for that matter, type-parametrized functions.
OTOH, static duck typing is brilliant: best of both worlds.
This is indeed interesting, and this is why I'm missing something like func <A, B> Map(f func(A) B, input []A) []B that would statically check the A and B types at a call site.
BTW it looks like less work at compile time than the elaborate run-time solution that you linked to. It probably will not even require generation of specialized versions for primitive types.
But OTOH it really "just works" out of the box.