3 ms·
> "It is only superficially object-oriented (no classes, no inheritance, just interfaces) so it is more transparent" What does that even mean?
by kingkilr 16y ago
> "It is only superficially object-oriented (no classes, no inheritance, just interfaces) so it is more transparent"
What does that even mean?
- BarkMore 16y agoFrom the FAQ: " Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a different approach that we believe is easy to use and in some ways more general. There are also ways to embed types in other types to provide something analogous—but not identical—to subclassing. Moreover, methods in Go are more general than in C++ or Java: they can be defined for any sort of data, not just structs." http://golang.org/doc/go_faq.html#Is_Go_an_object-oriented_language http://golang.org/doc/go_faq.html#Is_Go_an_object-oriented_l... The lack of type hierarchy makes code easier to understand.
- jamesaguilar 16y agoAlso, an "interface" is more of an enforced duck type annotation than an interface or ABC in Java or C++ terms respectively.
- aaronblohowiak 16y agoIIRC, the duck-type mode uses implicit interface creation but you can force an explicit interface if you want (please correct me if i am wrong.)
- BarkMore 16y agoInterfaces are explicitly defined in Go as they are in Java. The difference is that you do not declare the interfaces implemented by a type. If a type has methods that match an interface, then the type implicitly implements the interface.
- aaronblohowiak 16y agoOooooh, that makes sense. Thanks for the clarification.
- stcredzero 16y agothere is no type hierarchy A type hierarchy seems to get misused almost as often as it's well used. The net benefit of it is much less than what the inventors imagined.
- silentbicycle 16y agoHaving never written Go, I suspect it means that Go isn't prone to code that requires you to read eleven different files in their entirety just to determine which parts of a method will be polymorphically dispatched to from a given line - code can be reasoned about locally.