https://medium.com/@thegalang/examples-of-applying-design-patterns-to-projects-written-in-go-b41a515aa483