golang中goroutine错误捕获讲解

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

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


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

查看所有标签

猜你喜欢:

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

一目了然

一目了然

Robert Hoekman, Jr. / 段江玲 / 机械工业出版社华章公司 / 2012-3-19 / 59.00元

可用性或易用性是软件或Web设计师的重要设计目标之一。本书深入阐述了如何设计出简单易用的基于Web的软件,以帮助读者理解、掌握显性设计的精髓。作者从软件开发初期谈起,一直到软件设计后期,分析诸多案例并论证了自己的见解或设计原则。本书在第1版的基础上进行了重大改进,尤其是在设计思想上,作者在本书中谈到“以用户为中心的设计”、“以任务为中心的设计”以及“以情景为中心的设计”的理念。这种设计理念也将更直......一起来看看 《一目了然》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码