我正在编写一个简单的oklog/run包示例,在try 返回错误日志(log)时,我在VS代码中看到了这个编译错误:

log.Errorf("abnormal termination: %s", err) (no value) used as value

在组的描述中.运行它说

".Run仅在所有参与者退出时返回.Run返回第一个退出参与者返回的错误."

我想知道这是否与此有关,比如它无法使用当前不存在的错误进行编译,因为运行.团队还没有全部回来?

谢谢你的帮助.

代码:

package main

import (
    "context"
    "time"

    "github.com/oklog/run"
    "github.com/pkg/errors"
    log "github.com/sirupsen/logrus"
)

func logAForever(ctx context.Context) {
    for {
        select {
        case err := <-ctx.Done():
            log.Error(err)
            return
        default:
            log.Info("A")
            time.Sleep(1 * time.Second)
        }
    }
}

func logBFor10Sec(ctx context.Context) {
    for i := 1; i < 10; i++ {
        log.Info("B")
        time.Sleep(1 * time.Second)
    }
}

func main() {
    ctx, testStopFunc := context.WithCancel(context.Background())

    var group run.Group

    group.Add(func() error {
        log.Info("First actor added to run group. Starting execute function...")
        logAForever(ctx)
        return nil
    }, func(error) {
        log.Info("The first interrupt function was invoked.")
        testStopFunc()
        time.Sleep(100 * time.Millisecond)
    })

    group.Add(func() error {
        log.Info("Second actor added to run group. Starting execute function...")
        logBFor10Sec(ctx)
        return nil
    }, func(error) {
        log.Info("The second interrupt function was invoked.")
        testStopFunc()
        time.Sleep(100 * time.Millisecond)
    })

    if err := group.Run(); !errors.As(err, &run.SignalError{}) {
        // return
        return log.Errorf("abnormal termination: %s", err)
    }

}

VSCode编译器出错:

enter image description here

推荐答案

log.Errorf不返回值,但您试图通过return关键字返回它.

请try 以下代码:

if err := group.Run(); !errors.As(err, &run.SignalError{}) {
  log.Errorf("abnormal termination: %s", err)
  return
}

Go相关问答推荐

gorm如何声明未自动更新的unix时间戳米尔斯字段

GoLang:无法发送带有附件的邮箱

Go中的net.SplitHostPort(r.RemoteAddr)安全性

在Golang中Mergesort的递归/并行实现中出现死锁

golang有int32溢出吗?

如何使用gosdk在Dynamodb中进行UpdateItem时,将ValueBuilder对象声明为StringSet类型?

Golang text/template中的startswith函数 - 入门教程

Go test "-run -" 标志执行测试更快

Secrets Manager Update Secret - Secret String 额外的 JSON 编码

是否可以在 hyperledger-chaincode 中使用 gRPC?如果可以,我如何避免在测试网络上调用时出错?

Golang crypto/rand 线程安全吗?

使用 Go 解组 SOAP 消息

转换朴素递归硬币问题时的记忆错误

将 big.Int 转换为 [2]int64,反之亦然和二进制补码

从数据库中带有 imageurl 的文件夹中获取图像,并在我的浏览器中用 golang 中的 echo 显示

如何在时间范围内规范化数组的元素?

致命错误:找不到由 zergon321/reisen 引起的libavcodec/avcodec.h文件

如何通过组合来自不同包的接口来创建接口?

带有 grpc 的 protobuf 用于拆分包中的 Go

如何发送带有登录数据的 GET 请求并将 cookie 数据保存到 txt 文件?