> Did they consider the OCaml approach of "generic modules"?
Heh, I certainly can't speak for them, and I don't know what they've considered outside of that link. I also don't know C# or OCaml well enough to say if Go should/could adopt their strategies. However, Java's generics aren't very satisfying, and I think Go is wise to not jump in prematurely.
Hygienic macros (as in Scheme or Rust (Nim? Elixir? Julia?)) seem like a more mature concept that could solve most of the problem.
Also, there is the hybrid method between C++ and Java, which C# implements: Instantiation for value types and type erasure for reference types.