package main import ( "fmt" "sync" "sync/atomic" ) func listing1() { wg := sync.WaitGroup{} var v uint64 for i := 0; i < 3; i++ { go func() { wg.Add(1) atomic.AddUint64(&v, 1) wg.Done() }() } wg.Wait() fmt.Println(v) } func listing2() { wg := sync.WaitGroup{} var v uint64 wg.Add(3) for i := 0; i < 3; i++ { go func() { atomic.AddUint64(&v, 1) wg.Done() }() } wg.Wait() fmt.Println(v) } func listing3() { wg := sync.WaitGroup{} var v uint64 for i := 0; i < 3; i++ { wg.Add(1) go func() { atomic.AddUint64(&v, 1) wg.Done() }() } wg.Wait() fmt.Println(v) }