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的结果是否正确。


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

查看所有标签

猜你喜欢:

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

React

React

卓越开发者联盟 / 寸志、范洪春、杨森、陈涌 / 电子工业出版社 / 2015-5-1 / CNY 65.00

2014 年横空出世的由Facebook 推出的开源框架React.js,基于Virtual DOM 重新定义了用户界面的开发方式,彻底革新了大家对前端框架的认识,将PHP 风格的开发方式迁移到客户端应用开发。其优势在于可以与各种类库、框架搭配使用。《React:引领未来的用户界面开发框架》是这一领域的首作,由多位一线专家精心撰写,采用一个全程实例全面介绍和剖析了ReactReact.js 的方方......一起来看看 《React》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具