<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之旅 廣告
                > 協程是Go語言的關鍵特性,主要用于并發編程,協程是一種輕量級的線程,因為協程開銷比較小,所以創建上萬的協程也不是什么難事 [TOC] ## 創建并運行協程 > 通過go關鍵詞創建一個協程 ``` go dotest() ``` > 例子 > go攜程特性:當主攜程退出后,子攜程隨之退出 ``` package main import ( "fmt" "strconv" "time" ) // 定義一個函數,循環打印5次字符串 func say(name string) { for i := 0; i < 5; i++ { // 當前協程休眠1秒 time.Sleep(1000 * time.Millisecond) fmt.Println(name + strconv.FormatInt(int64(i), 10)) } } // 程序啟動的時候,首先創建一個主協程,運行main函數 func main() { // 創建一個協程,運行say函數,傳入參數"wk" go say("wk") // 在主協程中運行say函數,傳入參數"jiaojiao" go say("jiaojiao") // 以下代碼,設置無線循環,可組織主攜程退出 /*for { ; }*/ } ``` > 以上例子,wk和jiaojiao交叉輸出,但是有可能say("jiaojiao")函數先執行完成,主程就會退出,導致say("wk")函數的攜程沒有執行完畢就終止了。 > 解決這種問題,就需要用到`channel通信`,如下 ~~~ package main import "fmt" func doubleNum(num int, c chan int) { c <- num * 2 } func main() { // 定義一個無緩沖區的channel,用來接收協程計算結果 channel := make(chan int) // 創建第1協程 go doubleNum(3, channel) // 創建第2個協程 go doubleNum(2, channel) // 使用channel讀取,會進行阻塞,直到有數據后,才會往下執行 x := <-channel y := <-channel // 打印計算結果,主程退出 fmt.Println(x, y, x+y) } ~~~ ## 協程通信 > 協程之間通信主要有兩種方式 > * [共享全局變量](https://www.tizi365.com/archives/457.html):因為協程本身是在同一個進程中運行,所以可以共享變量,但是為了解決并發問題,保證數據原子性,需要加鎖處理。 > * channel:管道通信,避免復雜的加鎖操作(下篇將進行介紹)
                  <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>

                              哎呀哎呀视频在线观看