<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                有時你會與來自系統不同部分的通道交互。與管道不同的是,當你使用的代碼通過done通道取消操作時,你無法對通道的行為方式做出判斷。也就是說,你不知道正在執行讀取操作的goroutine現在是什么狀態。出于這個原因,正如我們在“防止Goroutine泄漏”中所闡述的那樣,需要用select語句來封裝我們的讀取操作和done通道。可以簡單的寫成這樣: ``` for val := range myChan { // 對 val 進行處理 } ``` 展開后可以寫成這樣: ``` loop: for { select { case <-done: break loop case maybeVal, ok := <-myChan: if ok == false { return // or maybe break from for } // Do something with val } } ``` 這樣做可以快速退出嵌套循環。繼續使用goroutines編寫更清晰的并發代碼,而不是過早優化的主題,我們可以用一個goroutine來解決這個問題。 我們封裝了細節,以便其他人調用更方便: ``` orDone := func(done, c <-chan interface{}) <-chan interface{} { valStream := make(chan interface{}) go func() { defer close(valStream) for { select { case <-done: return case v, ok := <-c: if ok == false { return } select { case valStream <- v: case <-done: } } } }() return valStream } ``` 這樣做允許我們回到簡單的循環方式: ``` for val := range orDone(done, myChan) { // Do something with val } ``` 你可能會在代碼中發現需要使用一系列select語句的循環代碼,但我會鼓勵你先嘗試提高可讀性,并避免過早優化。 * * * * * 學識淺薄,錯誤在所難免。我是長風,歡迎來Golang中國的群(211938256)就本書提出修改意見。
                  <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>

                              哎呀哎呀视频在线观看