我们要在接收数据的中间关闭通道。就像当我们刚刚收到Output作为10而不是所有值一样。
我们总是可以在goroutine中调用loop并将通道设置为nil,但随后我们需要在主线程中侦听,即使那样也无法完成。
有什么建议吗?
package main
import (
"fmt"
"time"
)
func addVal(ch chan int) {
ch <- 10
ch <- 20
ch <- 30
}
func main() {
ch := make(chan int, 3)
go addVal(ch)
func () {for i := 0; i< 3; i++ {
val, ok := <-ch
if !ok {
fmt.Println("not ok")
} else {
fmt.Println(val)
}
//ch = nil
}}()
time.Sleep(time.Second*1)
}
问题陈述 我们希望从多个来源接收数据,其中之一是主要来源。因此,如果我们从主要数据源接收数据,则可以关闭通道,否则,我们将继续从其他数据源接收数据。