No thanks.
interface{} is like Object, if it even exists once in your code, it's broken.
You can only get out the same type you put in. Presumably in your code you know that collection of Foo objects contains Foos, so you can just do:
if foo, ok = collection.get().(Foo); !ok {
return errors.New("expected a Foo")
}
Write a few wrapper functions and you're done.Seriously, this is why generics exist. I want to write it once, use it everywhere again, and want to have the compiler know if I made a mistake.
1. Using an interface would nuke your performance. Data structures where every data structure operation requires one or more vtable lookups on items in the structure can really hurt your time and space performance. To get good performance, you need true type-level generics so the compiler can specialize at compile time.
2. Anyone could put anything that followed the interface in the data structure, even if it was of the wrong type. To get any form of static type safety, you'd still have to define a wrapper type and a bunch of functions for every type you'd want to put in the data structure. You could save a bit of work by re-using your (slow) code you wrote generically using interfaces.