第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 代碼是如何工作的?

golang 代碼是如何工作的?

Go
慕的地8271018 2022-01-17 20:06:15
func Tick() {                                                                                                                                             fmt.Println("startTime", time.Now().Format("2006-01-02 15:04:05"))                                                                                    t := time.NewTicker(time.Second * 3)                                                                                                                  time.Sleep(time.Second * 12)                                                                                                                          for {                                                                                                                                                     stamp := <-t.C                                                                                                                                        fmt.Println("tickTime", stamp.Format("2006-01-02 15:04:05"))                                                                                      }                                                                                                                                                 }          上面代碼段的輸出是:開始時間 2016-06-22 16:22:20滴答時間 2016-06-22 16:22:23滴答時間 2016-06-22 16:22:35滴答時間 2016-06-22 16:22:38滴答時間 2016-06-22 16:22:41滴答時間 2016-06-22 16:22:44當(dāng)我延遲代碼時,為什么會在沒有時間戳 16:22:26、16:22:29 的情況下發(fā)生這種情況?
查看完整描述

1 回答

?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗 獲得超3個贊

這是 Ticker 源(請原諒行號,我從文檔源頁面復(fù)制了這個):


    func NewTicker(d Duration) *Ticker {

            if d <= 0 {

                panic(errors.New("non-positive interval for NewTicker"))

            }

            // Give the channel a 1-element time buffer.

            // If the client falls behind while reading, we drop ticks

            // on the floor until the client catches up.

            c := make(chan Time, 1)

            t := &Ticker{

                C: c,

                r: runtimeTimer{

                    when:   when(d),

                    period: int64(d),

                    f:      sendTime,

                    arg:    c,

                },

            }

            startTimer(&t.r)

            return t

        }

注意評論


// Give the channel a 1-element time buffer.

// If the client falls behind while reading, we drop ticks

// on the floor until the client catches up.

發(fā)生了什么:

  1. 您創(chuàng)建計時器

  2. 計時器產(chǎn)生它的第一個滴答聲并緩沖它。

  3. 現(xiàn)在它等待、喚醒和阻塞,等待你消費,以便它可以產(chǎn)生第 2 個滴答。

  4. 最終,你的 goroutine 喚醒并立即消耗它產(chǎn)生的前兩個滴答聲,并再次開始產(chǎn)生滴答聲。

編輯:此外,文檔NewTicker(這Tick是一個方便的功能)說:

NewTicker 返回一個新的 Ticker,其中包含一個通道,該通道將以持續(xù)時間參數(shù)指定的周期發(fā)送時間。它調(diào)整間隔或丟棄滴答聲以彌補慢速接收器。持續(xù)時間 d 必須大于零;如果沒有,NewTicker 會恐慌。停止代碼以釋放相關(guān)資源。

雖然它沒有明確提到它是一個緩沖區(qū)為 1 的通道。



查看完整回答
反對 回復(fù) 2022-01-17
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號