2 回答

TA貢獻1840條經驗 獲得超5個贊
不能保證任何 go 例程在您的主例程完成之前運行。當主例程完成時,您的程序將退出,而無需等待您創(chuàng)建的所有 go 例程完成(甚至啟動)。
解決此問題的最簡單方法是分配一個同步通道,將其傳遞給每個 echo 實例,并在您的日志語句之后向其寫入一個令牌。然后主線程應該count
在返回之前從該通道讀取令牌。

TA貢獻1891條經驗 獲得超3個贊
如果你退出你的主要 go 例程,它不會等待任何已經運行的 go 例程。您需要同步正在運行的 go 例程,根據我的經驗,sync.WaitGroup是正確的通用解決方案。
import (
"log"
"sync"
)
func main() {
count := 1000
slice := make([]int, count)
for i := 0; i <= count-1; i++ {
slice[i] = i
}
wg := new(sync.WaitGroup)
for _, v := range slice {
wg.Add(1)
go echo(v, wg)
}
wg.Wait()
}
func echo(v int, wg *sync.WaitGroup) {
defer wg.Done()
log.Println(v)
}
- 2 回答
- 0 關注
- 239 瀏覽
添加回答
舉報