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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 定時器 ~~~ type Timer struct { C<-chan Time r runtimeTimer } ~~~ ## Timer 一個定時器,代表未來的一個單一事件,你可以告訴timer你要等待多長時間,它提供一個channel,在將來的那個時間channel提供了一個時間值 ## 延時 **time.NewTimer時間到了,只響應一次** ~~~ func main() { //time.NewTimer時間到了,只響應一次 //創建一個定時器,設置時間為2s,2s后,往time通道寫內容(當前時間) timer := time.NewTimer(2 * time.Second) fmt.Println("當前時間: ", time.Now()) //2s后,往timer.c寫數據,有數據后,就可以讀取 t := <-timer.C //channel沒有數據前后阻塞 fmt.Println("t = ", t) } ~~~ **time.After(2 * time.Second)延遲多少秒產生個事件** ~~~ func main() { //定時2秒,2秒后產生一個事件,往channel里面寫內容 <-time.After(2 * time.Second) fmt.Println("時間到") } ~~~ ## 停止 關閉定時器,定時器就不起作用了 ~~~ func main() { timer := time.NewTimer(3 * time.Second) go func() { <-timer.C fmt.Println("子協程可以打印了,因為定時器的時間到了") }() //關閉定時器 timer.Stop() for { } } ~~~ ## 重置 ~~~ func main() { timer := time.NewTimer(3 * time.Second) //重置上面的那個無效 flag := timer.Reset(1 * time.Second) fmt.Println(flag) //true <-timer.C fmt.Println("時間到") } ~~~ # Ticker 定時觸發的計時器,它**會以一個間隔(interval)往channel發送一個事件(當前時間),而channel的接收者可以以固定的時間間隔從channel中讀取事件** ~~~ func main() { ticker := time.NewTicker(1 * time.Second) i := 0 for { <-ticker.C i++ fmt.Println("i = ", i) if i ==5 { //停止ticker ticker.Stop() break } } } ~~~ # 不斷取出數據 ~~~ intChan2 := getIntChan() for elem := range intChan2 { fmt.Printf("The element in intChan2: %v\n", elem) } ~~~ 我把調用getIntChan得到的結果值賦給了變量intChan2,然后用for語句循環地取出了該通道中的所有元素值,并打印出來。 這里的for語句也可以被稱為帶有range子句的for語句。它的用法我在后面講for語句的時候專門說明。現在你只需要知道關于它的三件事。 一、這樣一條for語句會不斷地嘗試從intChan2種取出元素值,即使intChan2被關閉,它也會在取出所有剩余的元素值之后再結束執行。 二、當intChan2中沒有元素值時,它會被阻塞在有for關鍵字的那一行,直到有新的元素值可取。 三、假設intChan2的值為nil,那么它會被永遠阻塞在有for關鍵字的那一行。 這就是帶range子句的for語句與通道的聯用方式。不過,它是一種用途比較廣泛的語句,還可以被用來從其他一些類型的值中獲取元素。除此之外,Go 語言還有一種專門為了操作通道而存在的語句:select語句
                  <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>

                              哎呀哎呀视频在线观看