6 WaitGroups

Waits for all threads to finish

var wg sync.WaitGroup;
wg.Add(n) 
wg.Done() // marks 1 waitgroup as done
wg.defer() // mark 1 waitgroup as done, when function returns
wg.Wait() // block until all waitgroups are done