案例

package main

import (
    "errors"
    "fmt"
)

func main() {

    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
            if i == 5 {
                ReErr() //这个方法返回错误了怎么处理?
            }
        }
    }()
    for {

    }
}

func ReErr() error {
    return errors.New("出错了~")
}

输出结果:

0
1
2
3
4
5
6
7
8
9

修改后的案例

package main

import (
    "errors"
    "fmt"
)

func main() {

    //创建一个通道
    chanErr := make(chan error)

    go func(chanErr chan error) {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
            if i == 5 {
                if err := ReErr(); err != nil {
                    //把错误写入通道
                    chanErr <- err
                    //跳出循环(小知识) 这里等同与break
                    goto goErr
                }
            }
        }
        chanErr <- nil
    goErr:
    }(chanErr)

    //这里会堵塞 直到chanErr通道写入
    select {
    case err := <-chanErr:
        if err != nil {
            fmt.Println("模拟错误处理")
        }
    }
    //别忘了关闭通道
    close(chanErr)
}

func ReErr() error {
    return errors.New("出错了~")
}

输出结果

0
1
2
3
4
5
模拟错误处理

版权声明:本文为原创文章,版权归 吾爱博客 所有,转载请联系博主获得授权!
本文地址:https://www.52bd.net/code/219.html

发表评论

正在加载 Emoji
×