https://medium.programmerscareer.com/factory-pattern-you-should-know-in-golang-design-patterns-02-ca6d9ccb281d