https://golangbot.com/buffered-channels-worker-pools/
https://golang.org/doc/
https://medium.com/go-walkthrough
https://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go