No, type erasure is actually an (unplanned) feature, because it didn't cripple the runtime for other languages.
On this one people miss the forest from the trees. dotNET type reification is about introducing runtime meta-data and checks, which you only need when your type system is not strong / expressive enough, which makes you want to do `isInstanceOf` checks. Well, guess what, needing to check that an instance is a List<int> is a failure of the language ;-)
This issue is also mixed with specialization for primitives. But that's actually unrelated because you don't need reification to do specialization. And actually you don't need runtime support either, as specialization can be compile time.
Also, in actual practice with Java, type reification is only a small usability issue. The real clusterfuck have been those wildcards for expressing use-site variance.
> It allowed to stay compatible with JVM. Go has no such restrictions
That's circular logic, given the JVM release cycle is tightly linked to Java the language and has had evolved in response to new features of Java.
No, the actual reason was to preserve compatibility with older code that weren't using generics (e.g. List vs List<int>) without forking the standard library in pre- and post-generics functionality (like .NET has done).
Go will have exactly the exact same problem.