### Lack of generics Generics are well supported by a wide range of languages, and is one of the most requested lacking features of Go. The usual response from the Go authors is that implementing generics will either slow down compilation, the code, or the programmer. While that is almost a believable reason, the funnier part of their reasoning is (excerpt from FAQ): … #### Flow disruption Perhaps the most elusive, but rather destructive aspect of the lack of generics in Go is how the language forces the user to go into uninteresting details while expressing ideas, disrupting the programmer’s flow. We don’t have to venture far to see examples of this - we can stay at the topic of list operations, as we did in the previous example. … #### Lack of deriving Default implementations for certain interfaces should be provided. How can Go print out our structs or maps correctly? We don’t know. It is done with reflection, which is runtime concept and sidesteps the type system entirely. The ad hoc, edge case laden nature of Go shows here again. For those who are unfamiliar with the concept: … ### Other minor annoyances #### General inelegance ##### Superflous syntax Almost everywhere superflous brackets of all types can be found. What is the purpose of: vs (hypothetical Haskell equivalent) ? Go got rid of some of these (for loop, if requires no parentheses), but there are still plenty. ##### Operators should be functions The only reason operators are not functions is because the type system is not sophisticated enough to describe them.
Related Pain Points3件
Go lacks modern language features like generics, enums, and pattern matching
728% of developers want language features missing from Go that are available in other languages. Common requests include proper enums, union types, sum types, pattern matching, and nil pointer safety. Existing generics are criticized as half-baked.
Lack of Default Interface Implementations and Reflection Dependency
6Go lacks default implementations for common interfaces and relies on runtime reflection to handle operations like printing structs or maps, which sidesteps the type system entirely. This creates ad hoc, edge-case-laden behavior.
Excessive Syntactic Rules and Formatting Constraints
5Go enforces many strict formatting and syntax rules that developers find overly rigid, including constraints on brace placement, variable declarations, and operator usage. These rules limit expressiveness and feel unnecessarily restrictive.