国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

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

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

前言

在開始之前,對time.After使用有疑問的朋友們可以看看這篇文章:http://www.survivalescaperooms.com/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武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 神池县| 兰西县| 肃宁县| 丰城市| 句容市| 库车县| 台湾省| 宝丰县| 吴江市| 聊城市| 中西区| 和林格尔县| 崇州市| 华阴市| 梨树县| 丰台区| 读书| 黄骅市| 泰来县| 东乌珠穆沁旗| 英超| 文登市| 阳泉市| 德江县| 高平市| 兴城市| 疏附县| 垣曲县| 宁强县| 绥江县| 甘谷县| 天峻县| 慈利县| 二手房| 霍城县| 宜兰县| 郸城县| 灌阳县| 内丘县| 曲阳县| 周口市|