Go語言如何并發(fā)超時處理詳解
更新時間:2016年09月13日 14:27:38 投稿:daisy
大家都知道golang并沒有在語言層次上提供超時操作,但可以通過一些小技巧實現(xiàn)超時。下面來一起看看吧,有需要的朋友們可以參考借鑒。
實現(xiàn)原理:
并發(fā)一個函數(shù),等待1s后向timeout寫入數(shù)據(jù),在select中如果1s之內(nèi)有數(shù)據(jù)向其他channel寫入則會順利執(zhí)行,如果沒有,這是timeout寫入了數(shù)據(jù),則我們知道超時了。
實現(xiàn)代碼:
package main
import "fmt"
import "time"
func main() {
ch := make(chan int, 1)
timeout := make(chan bool, 1)
// 并發(fā)執(zhí)行一個函數(shù),等待1s后向timeout寫入true
go func() {
time.Sleep(1000)
timeout <- true
}()
// 這里會等待ch或timeout讀出數(shù)據(jù)
// 因為一直沒有向ch寫入數(shù)據(jù)
// 在1s后向timeout寫入了數(shù)據(jù)
// 所以執(zhí)行了timeout的case
// 利用這個技巧可以實現(xiàn)超時操作
select {
case <- ch :
fmt.Println("read from ch")
case <- timeout :
fmt.Println("time out...")
}
}
總結
以上就是這篇文章的全部內(nèi)容,希望對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
Kubernetes上使用Jaeger分布式追蹤基礎設施詳解
這篇文章主要為大家介紹了Kubernetes上使用Jaeger分布式追蹤基礎設施詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Go語言Web編程實現(xiàn)Get和Post請求發(fā)送與解析的方法詳解
這篇文章主要介紹了Go語言Web編程實現(xiàn)Get和Post請求發(fā)送與解析的方法,結合實例形式分析了Go語言客戶端、服務器端結合實現(xiàn)web數(shù)據(jù)get、post發(fā)送與接收數(shù)據(jù)的相關操作技巧,需要的朋友可以參考下2017-06-06

