And*_*ith 3 compiler-errors go go-context
我正在研究oklog/run包的一个简单示例,并且在尝试返回错误日志时在 VS Code 中看到此编译错误:
\nlog.Errorf("abnormal termination: %s", err) (no value) used as value\nRun Code Online (Sandbox Code Playgroud)\n在 group.Run 的描述中说
\n\n\n“..Run 仅在所有 actor 退出时返回。Run 返回第一个退出的 actor 返回的错误。”
\n
我\xe2\x80\x99m想知道这是否与它有关,比如它可以\xe2\x80\x99t编译当前不存在的错误,因为run.Group尚未全部返回?
\n感谢您提供的任何帮助。
\n代码:
\npackage main\n\nimport (\n "context"\n "time"\n\n "github.com/oklog/run"\n "github.com/pkg/errors"\n log "github.com/sirupsen/logrus"\n)\n\nfunc logAForever(ctx context.Context) {\n for {\n select {\n case err := <-ctx.Done():\n log.Error(err)\n return\n default:\n log.Info("A")\n time.Sleep(1 * time.Second)\n }\n }\n}\n\nfunc logBFor10Sec(ctx context.Context) {\n for i := 1; i < 10; i++ {\n log.Info("B")\n time.Sleep(1 * time.Second)\n }\n}\n\nfunc main() {\n ctx, testStopFunc := context.WithCancel(context.Background())\n\n var group run.Group\n\n group.Add(func() error {\n log.Info("First actor added to run group. Starting execute function...")\n logAForever(ctx)\n return nil\n }, func(error) {\n log.Info("The first interrupt function was invoked.")\n testStopFunc()\n time.Sleep(100 * time.Millisecond)\n })\n\n group.Add(func() error {\n log.Info("Second actor added to run group. Starting execute function...")\n logBFor10Sec(ctx)\n return nil\n }, func(error) {\n log.Info("The second interrupt function was invoked.")\n testStopFunc()\n time.Sleep(100 * time.Millisecond)\n })\n\n if err := group.Run(); !errors.As(err, &run.SignalError{}) {\n // return\n return log.Errorf("abnormal termination: %s", err)\n }\n\n}\n\nRun Code Online (Sandbox Code Playgroud)\nVSCode 编译器错误:
\n\nlog.Errorf不返回任何值,但您试图通过return关键字返回它。
试试这个代码:
if err := group.Run(); !errors.As(err, &run.SignalError{}) {
log.Errorf("abnormal termination: %s", err)
return
}
Run Code Online (Sandbox Code Playgroud)