github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/14_concurrent/waitgroup/main2.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "sync" 6 "time" 7 ) 8 9 type T struct { 10 V int 11 } 12 13 func (t *T) Incr(wg *sync.WaitGroup) { 14 t.V++ 15 wg.Done() 16 } 17 func (t *T) Print() { 18 time.Sleep(1e9) 19 fmt.Print(t.V) 20 } 21 22 /* 23 A: 输出12345678910 24 B: 输出0123456789 25 C: 输出9999999999 答案 why? 自己的分析是B 26 D: 输出10101010101010101010 27 */ 28 func main() { 29 var wg sync.WaitGroup 30 wg.Add(10) 31 var ts = make([]T, 10) 32 for i := 0; i < 10; i++ { 33 ts[i] = T{i} 34 } 35 for _, t := range ts { 36 go t.Incr(&wg) 37 } 38 wg.Wait() 39 for _, t := range ts { 40 go t.Print() 41 } 42 time.Sleep(5 * time.Second) 43 }