Go is like C. AKA roll your own unsafe type system at runtime with void pointers (or interface {} in Go). This isn't acceptable for a language released 10 years ago. On one hand you have a rigid type system very limited in terms of polymorphism, on the other hand with interface {} anything goes, even creating Adhoc functions at runtime.
Go should have taken cues from ADA and how it implements generics. There is enough polymorphism to solve most cases where generics are useful, but also enough limitations so that a codebase isn't cluttered with `Type A<Type B<C,D,Type E<F,G,H>>>` horrors everywhere.
Go should have taken cues from ADA and how it implements generics. There is enough polymorphism to solve most cases where generics are useful, but also enough limitations so that a codebase isn't cluttered with `Type A<Type B<C,D,Type E<F,G,H>>>` horrors everywhere.