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

