内容简介:之前在做其他语言是,对于异步调用,总有返回值和错误返回,并且能接收,对其进行处理。在go语言中,对于协程goroutine的返回值(包括错误)怎么捕获呢?
之前在做其他语言是,对于异步调用,总有返回值和错误返回,并且能接收,对其进行处理。
在 go 语言中,对于协程 goroutine 的代码,因为没有返回值接收,导致新手在学习时候会有困惑:
goroutine的返回值(包括错误)怎么捕获呢?
下面我们写一个列子来说明下。
package main
import (
"fmt"
"log"
"time"
)
type Resp struct {
data int
error error
}
func main() {
handleMsg()
}
func handleMsg() {
resp := make(chan Resp)
stop := make(chan struct{})
go func() {
t := time.Tick(time.Second)
index := 0
for {
select {
case <-t:
resp <- Resp{
data: index,
}
index++
case <-stop:
resp <- Resp{
error: fmt.Errorf("time tick stop error"),
}
}
}
}()
for {
select {
case val := <-resp:
if val.error != nil {
log.Fatal(val.error)
}
if val.data == 5 {
stop <- struct{}{}
}
fmt.Println("index", val.data)
}
}
}
这里 Resp 封装了接收值和错误类型,
type Resp struct {
data int
error error
}
利用select的接手值,来判断当前goroutine的结果是否正确。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
妙趣横生的算法(C++语言实现)
胡浩 / 清华大学出版社 / 2014-10-1 / 59.80元
《妙趣横生的算法(C++语言实现)》内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力。如果您想提高自己对算法和数据结构的理解能力,在程序设计之路上走得更远,那么请翻开《妙趣横生的算法(C++语言实现)》,仔细研读吧,它将助您一臂之力。 《妙趣横生的算法(C++语言实现)》以通俗易懂的语言深入浅出地介绍了常用的数......一起来看看 《妙趣横生的算法(C++语言实现)》 这本书的介绍吧!