This article is part of a group of articles Architecting go libraries for semantic versioning in which I am providing various patterns to help building Go libraries that can remain modular, and yet abide to semver. Let’s imagine your API has the following interface: type Animal interface { Name() string } One of the users of your library has implemented this interface with the following: type Cat struct { name string } func (c *Cat) Name() string { return c.