goroutine 错误:返回的参数太多

在使用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 ()


白板的微信
浏览 150回答 2
2回答

守候你守候我

您需要使用通道来实现您想要的:func main() {&nbsp; &nbsp; c := make(chan Response)&nbsp; &nbsp; go func() {&nbsp; &nbsp; &nbsp; &nbsp; res, err := example(a , b)&nbsp; &nbsp; &nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c <- Response{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ErrCode: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ErrMsg:"error",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }()&nbsp; &nbsp; value := <-c}

慕桂英546537

您为跨越 go 例程而提供的函数在其签名中没有返回。Go 例程无法返回数据。运行 goroutine(异步)和从函数获取返回值本质上是矛盾的操作。简单地说,goroutine不知道在哪里返回数据。因此,它不允许这样做。你可以做这样的事情:var response Responsevar wg sync.WaitGroupwg.Add(1)go func() {&nbsp; &nbsp; defer wg.Done()&nbsp; &nbsp; res, err := example(a, b)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; response = res&nbsp; &nbsp; }}()wg.Wait()return response
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go