A Go type implements an interface by implementing the methods of that interface, nothing more.
This property allows interfaces to be defined and used without needing to modify existing code.
It enables a kind of structural typing that promotes separation of concerns and improves code re-use, and makes it easier to build on patterns that emerge as the code develops.
The semantics of interfaces is one of the main reasons for Go’s nimble, lightweight feel.