https://medium.com/@deyagondsamarth/concurrent-goroutines-achieving-thread-safety-with-go-channels-and-mutexes-54d91f64a0ab