How Go accomplishes OOP, with out having type hierarchy, and instead using composition, embedding and interfaces