使用select,两个case 读取 同一个chan 中的数据,两个case都可能被执行到

package main

func main()  {
    ch := make(chan int)

    go func() {
        for {
            select {
            case l := <-ch:
                println(l) // 可能是执行这个
            case l2 := <-ch:
                println(l2) // 也有可能执行这个
            }
        }
    }()
    for {
        ch <- 1
    }
}

select详解

自己理解的select

  • 每次select只选择一个有数据的通道执行,执行完毕后返回继续select
  • 每次select都把case打乱,从上往下执行,直到找到一个有数据的通道
  • 如果case中的代码很耗时,可以用time.Sleep测试,是不会继续进行下一次select的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
九九一十八,一步一个脚印
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!