channel的循环

king54346 · 2021-09-17 11:19:23 · 1472 次点击
yudotyang
欢迎关注「Go学堂」,看Go易错集锦

这个是跟无缓冲通道有关系的。在无缓冲通道中,是不能自己生产,自己消费的。因为在无缓冲通道中,有一个生产者发送消息,则需要找到一个消费者消费,这样才能可以。可以将通道更改成缓冲通道就可以了。

#6
更多评论

看看这样能不能实现你的想法,这是单向通道的东西

func test1(ch chan<- int) {
    for i := 1; i <= 5; i++ {
        ch <- i
    }
    close(ch)
}

func test2(ch chan<- int, ch1 <-chan int) {
    for v := range ch1 {
        ch <- v
    }
    close(ch)
}

func test3(ch <-chan int) {
    for v := range ch {
        fmt.Println(v)
    }
}

func main() {
    ch1 := make(chan int)
    ch2 := make(chan int)
    go test1(ch1)
    go test2(ch2, ch1)
    test3(ch2)
}
#1

channel的读取必须成对出现

#2