channel的循环

king54346 · 2021-09-17 11:19:23 · 1483 次点击

不是必须成对出现的,chan 的写入读取可以当成生产消费来理解, 当生产者生产的数据总量不会超过chan的缓冲区,可以不需要消费者

#3
更多评论

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

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