Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 开始,将数据传递到通道_Go_Concurrency_Channel_Goroutine - Fatal编程技术网

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