<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 注意 * 監聽的case中,沒有滿足條件的就阻塞 * **多個滿足條件的就任選一個執行** * select本身不帶循環,需要外層的for * default通常不用,會產生忙輪詢 * break只能跳出select中的一個case 1. 加入了默認分支,那么無論涉及通道操作的表達式是否有阻塞,select語句都不會被阻塞。如果那幾個表達式都阻塞了,或者說都沒有滿足求值的條件,那么默認分支就會被選中并執行。 2. 如果沒有加入默認分支,那么一旦所有的case表達式都沒有滿足求值條件,那么select語句就會被阻塞。直到至少有一個case表達式滿足條件為止。 **如果select語句發現同時有多個候選分支滿足選擇條件,那么它就會用一種偽隨機的算法在這些分支中選擇一個并執行。注意,即使select語句是在被喚醒時發現的這種情況,也會這樣做** # 作用 go里面提供了一個關鍵字select,通過**select可以監聽channel上的數據流動** select的用法與switch語言非常類似,由select開始一個新的選擇塊,每個選擇塊條件由case語句來描述 與switch語句可以選擇任何可使用相等比較的條件相比,select有比較多的限制,其中最大的一條限制就是**每個case語句里必須是一個IO操作** ~~~ for { select { case <-chan1: //..... case chan2<-1: //.... default: //都沒成功,進入...... } } ~~~ 在一個select語句中,go語言會按順序從頭到尾評估每一個發送和接收的語句 如果其中的任意一語句可以繼續執行(即沒有被阻塞),那么就從哪些可以執行的語句中任意選擇一條來使用 如果沒有任意一條語句可以執行(即所有的通道都被阻塞),那么有兩種可能的情況: * 如果給出了default語句,那么就會執行default語句,同時程序的執行會從select語句后的語句中恢復 * 如果沒有default語句,那么select語句將被阻塞,直到至少有一個通信可以進行下去 # 防止channel超時機制 有時候會出現協程阻塞的情況,那么我們如何避免這個情況?我們可以使用select來設置超時 ~~~ func main() { c := make(chan int) o := make(chan bool) go func() { for { select { case v:= <-c: fmt.Println(v) //5秒鐘自動關閉,避免長時間超時 case <-time.After(5 * time.Second): fmt.Println("timeout") o<-true break } } }() //有值就主協程走,主協程走完就都沒了 <-o fmt.Println("程序結束") } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看