Feb 3, 2025
Don’t create interfaces for types that only have one implementation. Instead, export the concrete type directly. It lets users define their own interfaces if needed. Suppose, you have a FileLogger struct with a Log() method, don’t export a Logger interface for it. Just export FileLogger. Users who need an interface can define one themselves, like type CustomLogger interface { Log() }, and use FileLogger with it. It will keep your code simple and avoid forcing unnecessary abstractions on others.