golang在goroutine裡的錯誤怎麼傳遞?
首先 goroutine 真的很爽。。。 場景是這樣的,就是要把 goroutine 裡的錯誤訊息傳遞出來,簡單的程式碼示例:
func work(some string, ch chan string){
// do something
err:=dosomething()
for{
select{
case <-ch:
// do something
err:=doOthersome()
}
}
}
func main(){
go work(some, ch)
// 在這裡如何得到work函式裡的err
}
我現在用的是在 main 函式裡定義一個 chan error,傳遞給 work,然後在 work 裡有 err 的時候,給這個 chan error 發訊息,在 main 函式裡接收,但這樣如果沒有 err,會導致 main 函式阻塞。
func work(some string, ch chan string, chanErr chan error){
// do something
err:=dosomething()
if err!=nil{
chanErr<-err
return
}
for{
select{
case <-ch:
// do something
err:=doOthersome()
if err!=nil{
chanErr<-err
return
}
}
}
}
func main(){
chanErr:=make(chan error)
go work(some, ch, chanErr)
// 在這裡接收work函式裡的err, 沒有任何錯誤的話會阻塞
err:=<-chanErr
}
來請教大家,有沒有更好的方法?不讓 main 函式阻塞
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- context裡的超時時間是怎麼在微服務之間傳遞的Context微服務
- 怎樣向自定義標籤裡傳遞用Controller裡的assign()傳遞到頁面上的值Controller
- 關於golang的goroutine schedulerGolang
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- [Golang基礎]GoroutineGolang
- 如何優雅的在Golang中進行錯誤處理Golang
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- ng-template 使用過程中引數傳遞錯誤的單步除錯除錯
- EndNote裡參考文獻的期刊名顯示錯誤怎麼辦?
- Python怎麼傳遞不定引數Python
- Golang 的 goroutine 是如何實現的?Golang
- Debug: setTimeout 使用做定時器時的錯誤函式傳遞方式定時器函式
- 網站提示400錯誤:錯誤請求怎麼辦網站
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- 安裝golang tour,提示錯誤Golang
- 404錯誤頁面是怎麼造成的
- github上傳遇到的錯誤Github
- php7中的curl檔案上傳出現錯誤該怎麼辦PHP
- HTTP代理錯誤怎麼解決?HTTP
- 糟糕,在錯誤的分支開發了新功能,該怎麼處理呢?
- steam磁碟寫入錯誤怎麼解決 steam安裝時發生錯誤怎麼辦
- 第 12 期 golang 中 goroutine 的排程Golang
- Golang開發常見的57個錯誤Golang
- 印表機提示列印錯誤怎麼解決 印表機狀態錯誤的方法
- win10 關閉自動傳送錯誤報告方法 windows10錯誤報告怎麼關閉Win10Windows
- Golang —— goroutine(協程)和channel(管道)Golang
- Golang 獲取 goroutine id 完全指南Golang
- Golang通脈之錯誤處理Golang
- golang: 返回錯誤時列印堆疊Golang
- 說說不知道的Golang中引數傳遞Golang
- 代理508限制錯誤怎麼解決?
- 印表機錯誤無法列印怎麼處理 印表機錯誤不能列印的方法
- 網站域名解析為什麼錯誤?域名解析錯誤怎麼解決?網站
- Golang語言並行設計的核心goroutineGolang並行
- mock在vue裡怎麼用MockVue
- Go 之基礎速學 (五) golang 裡函式以及函式之間引數的傳遞Golang函式
- 請問這種路由在blade模板中通過route()該怎麼傳遞呢?路由
- Golang 入門 : 等待 goroutine 完成任務Golang
- 「Golang成長之路」併發之GoroutineGolang