目前,我正在将所有值推送到通道中,并从通道中读取数据,然后对其进行平方运算.
我想避免使用time.Sleep(2000 * time.Millisecond)
,因为它会阻塞执行2秒,相反,我希望每个Goroutine都处理并等待它的执行,然后退出程序.我刚刚和golang 失go 了联系,所以现在问这个基本的问题:有人能帮我这个忙吗?
package main
import (
"fmt"
"sync"
"time"
)
func doSquare(num int) int {
return num * num
}
var wg sync.WaitGroup
func main() {
wg.Add(1)
st := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
quit := make(chan bool)
ch := make(chan int)
go func() {
for i := range st {
ch <- i
}
}()
go func() {
for {
select {
case x := <-ch:
fmt.Println(doSquare(x))
// return
case <-quit:
wg.Done()
default:
// fmt.Println("---")
// do something
}
}
}()
quit <- true
wg.Wait()
time.Sleep(2000 * time.Millisecond)
}