1 回答

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊
在您使用sync.WaitGroup、通道或其他機(jī)制明確等待它們之前,您啟動的任何 goroutine 都不能保證已經(jīng)完成(甚至開始!)。這有效:
package main
import (
"fmt"
"math/rand"
"sync"
)
var (
b1 []float64
b2 []float64
)
func main() {
wg := new(sync.WaitGroup)
wg.Add(2)
go fill(&b1, 10, wg)
go fill(&b2, 10, wg)
wg.Wait()
fmt.Println(b1)
fmt.Println(b2)
}
func fill(a *[]float64, n int, wg *sync.WaitGroup) {
for i := 0; i < n; i++ {
*a = append(*a, rand.Float64()*100)
}
wg.Done()
}
(只是說話的風(fēng)格,如果是我的話我會想辦法讓這個函數(shù)返回擴(kuò)大切片所以它類似于append()本身,而Go的代碼審查意見建議傳遞價值觀,但在所有非常規(guī)的它不是延長為指針經(jīng)過切片接收器(“這個”)參數(shù)。)
- 1 回答
- 0 關(guān)注
- 205 瀏覽
添加回答
舉報