There are a whole host of ways that Haskell supports (or has been extended to support) generic programming. There's a big overview here:
http://www.haskell.org/haskellwiki/Research_papers/Generics
In the simplest case, generic programming in Haskell is done using type classes (similar to OO "interfaces"), often with the GHC extension for derivable type classes. If I understand correctly, this is generally implemented by implicitly passing a table of type information to the generic function at runtime, though I believe that compilers are able to optimize this away at compile time in some (most?) cases.
I'm not sure how well any of this would apply to Go, which doesn't have Haskell's type system.