Go got this right: small interfaces, no inheritance.
A type satisfies an interface by having the methods. No "implements" keyword. No taxonomy to maintain. The interface is just a contract, defined where it's used.
This means interfaces stay tiny — usually 1 or 2 methods — because nobody is tempted to bundle unrelated concerns into a base class.
The result: composition wins. Code is easier to test because the seams are everywhere.