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)文章
gorm golang 并發(fā)連接數(shù)據(jù)庫報(bào)錯的解決方法
今天小編就為大家分享一篇gorm golang 并發(fā)連接數(shù)據(jù)庫報(bào)錯的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度
這篇文章主要介紹了利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度,文章圍繞主題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
如何判斷Golang接口是否實(shí)現(xiàn)的操作
這篇文章主要介紹了如何判斷Golang接口是否實(shí)現(xiàn)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
教你用go語言實(shí)現(xiàn)比特幣交易功能(Transaction)
每一筆比特幣交易都會創(chuàng)造輸出,輸出都會被區(qū)塊鏈記錄下來。給某個人發(fā)送比特幣,實(shí)際上意味著創(chuàng)造新的 UTXO 并注冊到那個人的地址,可以為他所用,今天通過本文給大家分享go語言實(shí)現(xiàn)比特幣交易功能,一起看看吧2021-05-05

