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)容,希望對(duì)大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
一文帶你掌握掌握 Golang結(jié)構(gòu)體與方法
在 Golang 中,結(jié)構(gòu)體和方法是實(shí)現(xiàn)面向?qū)ο缶幊痰闹匾M成部分,也是 Golang 的核心概念之一。在本篇文章中,我們將深入介紹 Golang 結(jié)構(gòu)體與方法的概念、使用方法以及相關(guān)的編程技巧和最佳實(shí)踐2023-04-04Golang錯(cuò)誤處理:異常捕捉和恢復(fù)機(jī)制
Golang中,異常處理是通過 defer + panic + recover 的方式來實(shí)現(xiàn)的,使用 defer 可以將清理操作注冊(cè)到函數(shù)執(zhí)行完畢后執(zhí)行,而 panic 和 recover 可以用于處理異常,通過組合使用這些功能,可以實(shí)現(xiàn)更加健壯的程序2024-01-01Go語言實(shí)戰(zhàn)之詳細(xì)掌握正則表達(dá)式的應(yīng)用與技巧
正則表達(dá)式是一種從左到右與主題字符串匹配的模式,正則表達(dá)式用于替換字符串中的文本,驗(yàn)證表單,基于模式匹配從字符串中提取子字符串等等,這篇文章主要給大家介紹了關(guān)于Go語言實(shí)戰(zhàn)之詳細(xì)掌握正則表達(dá)式的應(yīng)用與技巧,需要的朋友可以參考下2023-12-12Golang中context庫的高級(jí)應(yīng)用
context庫不僅對(duì)于提升代碼的效率和性能至關(guān)重要,而且還幫助開發(fā)者在復(fù)雜的系統(tǒng)中保持代碼的清晰和可維護(hù)性,下面我們就來看看context庫的高級(jí)應(yīng)用吧2024-01-01