欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言如何并發(fā)超時(shí)處理詳解

 更新時(shí)間:2016年09月13日 14:27:38   投稿:daisy  
大家都知道golang并沒(méi)有在語(yǔ)言層次上提供超時(shí)操作,但可以通過(guò)一些小技巧實(shí)現(xiàn)超時(shí)。下面來(lái)一起看看吧,有需要的朋友們可以參考借鑒。

實(shí)現(xiàn)原理:

并發(fā)一個(gè)函數(shù),等待1s后向timeout寫入數(shù)據(jù),在select中如果1s之內(nèi)有數(shù)據(jù)向其他channel寫入則會(huì)順利執(zhí)行,如果沒(méi)有,這是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)橐恢睕](méi)有向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é)

以上就是這篇文章的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • go語(yǔ)言基礎(chǔ)語(yǔ)法示例

    go語(yǔ)言基礎(chǔ)語(yǔ)法示例

    這篇文章主要介紹了go語(yǔ)言基礎(chǔ)語(yǔ)法示例,介紹了go語(yǔ)言較為全面的基礎(chǔ)知識(shí),具有一定參考價(jià)值,需要的可以了解下。
    2017-11-11
  • Go中時(shí)間與時(shí)區(qū)問(wèn)題的深入講解

    Go中時(shí)間與時(shí)區(qū)問(wèn)題的深入講解

    go語(yǔ)言中如果不設(shè)置指定的時(shí)區(qū),通過(guò)time.Now()獲取到的就是本地時(shí)區(qū),下面這篇文章主要給大家介紹了關(guān)于Go中時(shí)間與時(shí)區(qū)問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • golang 切片截取參數(shù)方法詳解

    golang 切片截取參數(shù)方法詳解

    這篇文章主要介紹了golang 切片截取參數(shù)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Go語(yǔ)言錯(cuò)誤處理異常捕獲+異常拋出

    Go語(yǔ)言錯(cuò)誤處理異常捕獲+異常拋出

    這篇文章主要介紹了Go語(yǔ)言錯(cuò)誤處理異常捕獲和異常拋出,Go語(yǔ)言的作者認(rèn)為java等語(yǔ)言的錯(cuò)誤處理底層實(shí)現(xiàn)較為復(fù)雜,就實(shí)現(xiàn)了函數(shù)可以返回錯(cuò)誤類型以及簡(jiǎn)單的異常捕獲,雖然簡(jiǎn)單但是也非常精妙,大大的提高了運(yùn)行效率,下文需要的朋友可以參考一下
    2022-02-02
  • 一文帶你掌握掌握 Golang結(jié)構(gòu)體與方法

    一文帶你掌握掌握 Golang結(jié)構(gòu)體與方法

    在 Golang 中,結(jié)構(gòu)體和方法是實(shí)現(xiàn)面向?qū)ο缶幊痰闹匾M成部分,也是 Golang 的核心概念之一。在本篇文章中,我們將深入介紹 Golang 結(jié)構(gòu)體與方法的概念、使用方法以及相關(guān)的編程技巧和最佳實(shí)踐
    2023-04-04
  • Golang錯(cuò)誤處理:異常捕捉和恢復(fù)機(jī)制

    Golang錯(cuò)誤處理:異常捕捉和恢復(fù)機(jī)制

    Golang中,異常處理是通過(guò) defer + panic + recover 的方式來(lái)實(shí)現(xiàn)的,使用 defer 可以將清理操作注冊(cè)到函數(shù)執(zhí)行完畢后執(zhí)行,而 panic 和 recover 可以用于處理異常,通過(guò)組合使用這些功能,可以實(shí)現(xiàn)更加健壯的程序
    2024-01-01
  • Go語(yǔ)言實(shí)戰(zhàn)之詳細(xì)掌握正則表達(dá)式的應(yīng)用與技巧

    Go語(yǔ)言實(shí)戰(zhàn)之詳細(xì)掌握正則表達(dá)式的應(yīng)用與技巧

    正則表達(dá)式是一種從左到右與主題字符串匹配的模式,正則表達(dá)式用于替換字符串中的文本,驗(yàn)證表單,基于模式匹配從字符串中提取子字符串等等,這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言實(shí)戰(zhàn)之詳細(xì)掌握正則表達(dá)式的應(yīng)用與技巧,需要的朋友可以參考下
    2023-12-12
  • 如何在Go中使用Casbin進(jìn)行訪問(wèn)控制

    如何在Go中使用Casbin進(jìn)行訪問(wèn)控制

    這篇文章主要介紹了如何在Go中使用Casbin進(jìn)行訪問(wèn)控制,Casbin是一個(gè)強(qiáng)大的、高效的開(kāi)源訪問(wèn)控制框架,其權(quán)限管理機(jī)制支持多種訪問(wèn)控制模型,Casbin只負(fù)責(zé)訪問(wèn)控制
    2022-08-08
  • Golang語(yǔ)言學(xué)習(xí)拿捏Go反射示例教程

    Golang語(yǔ)言學(xué)習(xí)拿捏Go反射示例教程

    這篇文章主要為大家介紹了Golang語(yǔ)言中Go反射示例的教程,教你拿捏Go反射,再也不用被Go反射折磨,有需要的朋友可以共同學(xué)習(xí)參考下
    2021-11-11
  • Golang中context庫(kù)的高級(jí)應(yīng)用

    Golang中context庫(kù)的高級(jí)應(yīng)用

    context庫(kù)不僅對(duì)于提升代碼的效率和性能至關(guān)重要,而且還幫助開(kāi)發(fā)者在復(fù)雜的系統(tǒng)中保持代碼的清晰和可維護(hù)性,下面我們就來(lái)看看context庫(kù)的高級(jí)應(yīng)用吧
    2024-01-01

最新評(píng)論