<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之旅 廣告
                請看下面代碼: ~~~ package main import ( "fmt" "time" ) var values = [5]int{10, 11, 12, 13, 14} func main() { // 版本A: for ix := range values { // ix是索引值 func() { fmt.Print(ix, " ") }() // 調用閉包打印每個索引值 } fmt.Println() // 版本B: 和A版本類似,但是通過調用閉包作為一個協程 for ix := range values { go func() { fmt.Print(ix, " ") }() } fmt.Println() time.Sleep(5e9) // 版本C: 正確的處理方式 for ix := range values { go func(ix interface{}) { fmt.Print(ix, " ") }(ix) } fmt.Println() time.Sleep(5e9) // 版本D: 輸出值: for ix := range values { val := values[ix] go func() { fmt.Print(val, " ") }() } time.Sleep(1e9) } ~~~ /* 輸出: ~~~ 0 1 2 3 4 4 4 4 4 4 1 0 3 4 2 10 11 12 13 14 ~~~ */ 版本A調用閉包5次打印每個索引值,版本B也做相同的事,但是通過協程調用每個閉包。按理說這將執行得更快,因為閉包是并發執行的。如果我們阻塞足夠多的時間,讓所有協程執行完畢,版本B的輸出是:`4 4 4 4 4`。為什么會這樣?在版本B的循環中,`ix`變量 實際是一個單變量,表示每個數組元素的索引值。因為這些閉包都只綁定到一個變量,這是一個比較好的方式,當你運行這段代碼時,你將看見每次循環都打印最后一個索引值`4`,而不是每個元素的索引值。因為協程可能在循環結束后還沒有開始執行,而此時`ix`值是`4`。 版本C的循環寫法才是正確的:調用每個閉包是將`ix`作為參數傳遞給閉包。`ix`在每次循環時都被重新賦值,并將每個協程的`ix`放置在棧中,所以當協程最終被執行時,每個索引值對協程都是可用的。注意這里的輸出可能是`0 2 1 3 4`或者`0 3 1 2 4`或者其他類似的序列,這主要取決于每個協程何時開始被執行。 在版本D中,我們輸出這個數組的值,為什么版本B不能而版本D可以呢? 因為版本D中的變量聲明是在循環體內部,所以在每次循環時,這些變量相互之間是不共享的,所以這些變量可以單獨的被每個閉包使用。
                  <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>

                              哎呀哎呀视频在线观看