goroutine error: too many arguments to return

goroutine error: too many arguments to return

我有一个函数在使用 goroutine 之前可以工作:

res, err := example(a , b)
if err != nil {
 return Response{
   ErrCode: 1,
   ErrMsg:"error",
 }
}

响应是一个结构定义的错误信息。当我使用 goroutine 时:

var wg sync.WaitGroup()
wg.Add(1)
go func(){
   defer wg.Done()
   res, err := example(a , b)
   if err != nil {
      return Response{
         ErrCode: 1,
         ErrMsg:"error",
    }
}()
wg.Wait()

然后我得到了

too many arguments to return
    have (Response)
    want ()

您提供的用于跨越 go 例程的函数在其签名中没有 return。 Go 例程不能 return 数据。 运行 goroutine(异步)和从函数中获取 return 值本质上是相互矛盾的行为。简单地说,goroutine 无法知道 return 数据去哪里。所以不允许。

你可以这样做:

var response Response

var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    res, err := example(a, b)
    if err != nil {
        response = res
    }
}()
wg.Wait()

return response

你需要使用通道来实现你想要的:

func main() {
    c := make(chan Response)
    go func() {
        res, err := example(a , b)
        if err != nil {
            c <- Response{
                ErrCode: 1,
                ErrMsg:"error",
            }
        }
    }()
    value := <-c
}