It says something that for the built-in collection types, Slice and Map, they had to hack around their own API and implement this-case-only ad hoc generics. Slice and Map should be fully implementable within the language.
However, the make() functions for slice and map are the only functions in the language that allow you to pass in a type and get that type back as a return function. Why can't users have that functionality? Generics seem to be the easiest way to get it.
myslice := mymake((MyType)(nil), 10).([]MyType)
which is much uglier than the built-in way. However, I'm kinda okay with reflection-laden runtime tomfoolery looking a bit messy, mostly because I rarely use it, and when I do I like it to stand out and be obvious what is going on.
Actually, the creators of Go are still not afraid of breaking things. For example, recent release (2011-02-01.1ยน) changed the syntax of non-blocking channel operations, and it broke code.
[1] https://groups.google.com/d/topic/golang-nuts/uHfjRyO1Q6c/di...