Go: The lack of generics
Go’s lack of generics means that people can’t overengineer in the way they are used to, so they need to put more thought into their designs.
There are some use cases where abstractions with generics are better
to the current ones (e.g. the sort
package), but by and large, in
other languages, people use them to build towers of abstractions which
you’ll later need to wrap your head around, which introduce conceptual
duplication (e.g. mocking and predicate frameworks) and which lead to
a fragmentation of Go style (as would be the case if people start
building abstractions to hide the go
keyword, like threading and
future libraries).