go for循環中調用goroutine ,使用chan進行通信

package main

import (
    "fmt"
    "runtime"
    "strconv"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    ch1 := make(chan int, 100)
    runtime.GOMAXPROCS(runtime.NumCPU())
    wg.Add(100)
    for i := 0; i < 100; i++ {
        go func(index int) {
            ch1 <- index
             wg.Done()
        }(i)
    }
    //不關閉會報 all goroutines are asleep
    go func() {
        wg.Wait()
        close(ch1)
    }()
    //defer close(ch1)
    index := 0
    for i := range ch1 {
        fmt.Println(i)
        index++
    }
    fmt.Println("index:" + strconv.Itoa(index))
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章