golang中goroutine错误捕获讲解

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5经典实例

HTML5经典实例

Christopher Schmitt、Kyle Simpson / 李强 / 中国电力出版社 / 2013-7 / 48.00元

《HTML5经典实例》对于从中级到高级的Web和移动Web开发者来说是绝佳之选,它帮助你选择对你有用的HTML5功能,并且帮助你体验其他的功能。个技巧的信息十分丰富,都包含了示例代码,并详细讨论了解决方案为何有效以及如何工作。一起来看看 《HTML5经典实例》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器