使用select,兩個case 讀取 同一個chan 中的資料,兩個case都可能被執行到

guoliang1994發表於2021-02-22
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 協議》,轉載必須註明作者和本文連結
九九一十八,一步一個腳印

相關文章