Go語言如何并發(fā)超時(shí)處理詳解
實(shí)現(xiàn)原理:
并發(fā)一個(gè)函數(shù),等待1s后向timeout寫入數(shù)據(jù),在select
中如果1s之內(nèi)有數(shù)據(jù)向其他channel
寫入則會(huì)順利執(zhí)行,如果沒有,這是timeout
寫入了數(shù)據(jù),則我們知道超時(shí)了。
實(shí)現(xiàn)代碼:
package main import "fmt" import "time" func main() { ch := make(chan int, 1) timeout := make(chan bool, 1) // 并發(fā)執(zhí)行一個(gè)函數(shù),等待1s后向timeout寫入true go func() { time.Sleep(1000) timeout <- true }() // 這里會(huì)等待ch或timeout讀出數(shù)據(jù) // 因?yàn)橐恢睕]有向ch寫入數(shù)據(jù) // 在1s后向timeout寫入了數(shù)據(jù) // 所以執(zhí)行了timeout的case // 利用這個(gè)技巧可以實(shí)現(xiàn)超時(shí)操作 select { case <- ch : fmt.Println("read from ch") case <- timeout : fmt.Println("time out...") } }
總結(jié)
以上就是這篇文章的全部內(nèi)容,希望對大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
Golang?中判斷兩個(gè)結(jié)構(gòu)體相等的方法
這篇文章主要介紹了Golang?中如何判斷兩個(gè)結(jié)構(gòu)體相等,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解
這篇文章主要為大家介紹了Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03go module構(gòu)建項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了go module構(gòu)建項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Go語言Web編程實(shí)現(xiàn)Get和Post請求發(fā)送與解析的方法詳解
這篇文章主要介紹了Go語言Web編程實(shí)現(xiàn)Get和Post請求發(fā)送與解析的方法,結(jié)合實(shí)例形式分析了Go語言客戶端、服務(wù)器端結(jié)合實(shí)現(xiàn)web數(shù)據(jù)get、post發(fā)送與接收數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06