首页 > 解决方案 > 如何使用 errorgroup 捕获错误?

问题描述

在这里,我希望 runner.go 包中的“运行”功能通过使用“错误组”连续运行。以后收到错误时如何捕获此错误?下面是我想做但失败的示例代码块。

谢谢你。

main.go

package main

import (
    "context"
    "fmt"
    "awesomeProject/runner"
    "golang.org/x/sync/errgroup"
    "time"
)

func main() {

    ctx := context.Background()
    g, ctx := errgroup.WithContext(ctx)

    g.Go(func() (err error) {
        return runner.Start(ctx, 1 * time.Second)
    })

    if err := g.Wait(); err != nil {
        fmt.Println(err)
        fmt.Println("app terminated")
    }
}

跑步者.go

package runner

import (
    "context"
    "errors"
    "fmt"
    "time"
)

func Start(ctx context.Context, dur time.Duration) error {
    ticker := time.NewTicker(dur)
    defer ticker.Stop()

    for {
        select {
        case <-ctx.Done():
            return nil
        case <-ticker.C:
            run(ctx)

        }
    }
}

func run(ctx context.Context) error {

    fmt.Println(time.Now().String())
    return errors.New("run:error")
}

标签: go

解决方案


推荐阅读