Understanding Sync.waitgroup.done In Go Resolving Goroutine Deadlock Errors