golang slice 并发写入
golang slice 并发写入 由于 slice/map 是引用类型,golang 函数是传值调用,所用参数副本依然是原来的 slice, 并发访问同一个资源会导致竟态条件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package main import ( "fmt" "sync" ) func main() { var ( slc = []int{} n = 10 wg sync.WaitGroup ) wg.Add(n) for i := 0; i < n; i++ { go func() { slc = append(slc, i) wg.Done() }() } wg.Wait() fmt.Println("len:", len(slc)) fmt.Println("done") } (每次执行都会有不同的结果) out: len: 3 done ...