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).