golang中goroutine错误捕获讲解

栏目: Go · 发布时间: 7年前

内容简介:之前在做其他语言是,对于异步调用,总有返回值和错误返回,并且能接收,对其进行处理。在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++语言实现)

妙趣横生的算法(C++语言实现)

胡浩 / 清华大学出版社 / 2014-10-1 / 59.80元

《妙趣横生的算法(C++语言实现)》内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力。如果您想提高自己对算法和数据结构的理解能力,在程序设计之路上走得更远,那么请翻开《妙趣横生的算法(C++语言实现)》,仔细研读吧,它将助您一臂之力。 《妙趣横生的算法(C++语言实现)》以通俗易懂的语言深入浅出地介绍了常用的数......一起来看看 《妙趣横生的算法(C++语言实现)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试