WaitGroup
A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls
Addto set the number of goroutines to wait for. Then each of the goroutines runs and callsDonewhen finished. At the same time,Waitcan be used to block until all goroutines have finished.
It's possible to have another goroutine also to wait on this group. The only
real constraint is that Add can only be called by the main one.
Add
func (wg *WaitGroup) Add(delta int)
The delta defines how many more - or less - goroutines, the goroutines
waiting need to actually wait for. When the counter gets to zero, then
all the waiting goroutines get released. If the counter is negative, then
Add panics.
Done
It decrements the counter by one.
Wait
Blocks the goroutine until the counter of the WaitGroup gets to zero.