golang在goroutine裡的錯誤怎麼傳遞?

sheepbao發表於2016-10-14

首先 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 函式阻塞

更多原創文章乾貨分享,請關注公眾號
  • golang在goroutine裡的錯誤怎麼傳遞?
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章