a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Golang > 正文

Go語言利用time.After實現超時控制的方法詳解

2020-04-01 18:54:03
字體:
來源:轉載
供稿:網友

前言

在開始之前,對time.After使用有疑問的朋友們可以看看這篇文章:http://www.5lwq4hdr.cn/tech/jiaoben/golang/322785.html

我們在Golang網絡編程中,經常要遇到設置超時的需求,本文就來給大家詳細介紹了Go語言利用time.After實現超時控制的相關內容,下面話不多說了,來一起看看詳細的介紹吧。

場景:

假設業務中需調用服務接口A,要求超時時間為5秒,那么如何優雅、簡潔的實現呢?

我們可以采用select+time.After的方式,十分簡單適用的實現。

首先,我們先看time.After()源碼:

// After waits for the duration to elapse and then sends the current time// on the returned channel.// It is equivalent to NewTimer(d).C.// The underlying Timer is not recovered by the garbage collector// until the timer fires. If efficiency is a concern, use NewTimer// instead and call Timer.Stop if the timer is no longer needed.func After(d Duration) <-chan Time { return NewTimer(d).C}

time.After()表示time.Duration長的時候后返回一條time.Time類型的通道消息。那么,基于這個函數,就相當于實現了定時器,且是無阻塞的。

超時控制的代碼實現:

package mainimport ( "time" "fmt")func main() { ch := make(chan string) go func() { time.Sleep(time.Second * 2) ch <- "result" }() select { case res := <-ch: fmt.Println(res) case <-time.After(time.Second * 1): fmt.Println("timeout") }}

我們使用channel來接收協程里的業務返回值。

select語句阻塞等待最先返回數據的channel,當先接收到time.After的通道數據時,select則會停止阻塞并執行該case的代碼。此時就已經實現了對業務代碼的超時處理。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩欧美国产一区二区 | 久草在线视频网 | 中文成人无字幕乱码精品 | 99精品国产在热久久 | 成人免费看电影 | 四虎永久在线 | 欧美日韩成人在线 | 一级毛片视频播放 | 欧美一级片在线 | 九一午夜精品av | 天天夜夜操 | 久久精品欧美一区二区三区不卡 | 久久久久久久久久久久国产精品 | 特级毛片在线大全免费播放 | 在线播放国产一区二区三区 | 日韩在线视频精品 | 国产精品www | 午夜精品一区二区三区在线视频 | 美欧一级片| 成人亚洲视频 | 精品国产一区二区三区久久影院 | 亚洲欧洲无码一区二区三区 | 日本一区二区视频在线观看 | 国产精品久久久久蜜臀 | 黄网站涩免费蜜桃网站 | 超碰在线观看免费版 | 日韩成人精品在线 | 特级黄一级播放 | 亚洲色图偷拍 | 亚洲另类视频 | 欧美日韩在线电影 | 日韩一区二区精品视频 | 久久国内精品 | 欧美一级视频 | 免费中文字幕 | v亚洲 | 欧美综合激情 | 亚洲成人网在线 | 黄页网站在线免费观看 | 亚洲女同老女人女同志 | 国产精品美女久久久久久久久久久 |