Go 开始,将数据传递到通道
我有个问题。下面是一个例子:Go 开始,将数据传递到通道,go,concurrency,channel,goroutine,Go,Concurrency,Channel,Goroutine,我有个问题。下面是一个例子: func平均值(c chan字符串,wg*sync.WaitGroup){ 推迟工作组完成() c因为你有一个无尽的for,所以最后的fmt.Println()语句永远不会到达 如果要执行最后一个fmt.Println()语句,必须中断循环,例如: loop: for { select { case <-timer1.C: wg.Add(1) go Avg(c, &
func平均值(c chan字符串,wg*sync.WaitGroup){
推迟工作组完成()
c因为你有一个无尽的for
,所以最后的fmt.Println()
语句永远不会到达
如果要执行最后一个fmt.Println()
语句,必须中断循环,例如:
loop:
for {
select {
case <-timer1.C:
wg.Add(1)
go Avg(c, &wg)
wg.Wait()
break loop
}
}
fmt.Println(<-c)
现在,它可以工作并打印(在屏幕上试用):
嘿,但在这种情况下,当主功能退出时,将停止运行,并且不会每秒触发一次提示。如何使用该提示将每秒触发?@MihaZoubek如果您不想在第一次提示后退出,那么显然不要“中断”循环。但是,您将需要(另一个)goroutine来“排空”c
频道同时进行,否则如果没有从它那里接收第二次发送,它将永远阻塞。
loop:
for {
select {
case <-timer1.C:
wg.Add(1)
go Avg(c, &wg)
wg.Wait()
break loop
}
}
fmt.Println(<-c)
c := make(chan string, 1) // Buffer for 1 value
test