> var foo map[<type>]interface{}
> solves 99% of issues where I would normally need generics.
But it also opens you to to runtime conversion errors, spurious if checks for type information compilers with generics have, or slow reflection to find the type.
> The author also doesn't really specify what kind of generics, there's a huge difference between parametric polymorphism (i.e. Haskell type classes) and Java/C++/C# generics.
Java/C++/C#/Haskell generics all provide parametric polymorphism though.
Haskell type classes provide ad hoc polymorphism, though I guess maybe they provide parametric polymorphism as well.
Per Wikipedia:
> In programming languages and type theory, parametric polymorphism is a way to make a language more expressive, while still maintaining full static type-safety. Using parametric polymorphism, a function or a data type can be written generically so that it can handle values identically without depending on their type.