在使用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 ()
2 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
您需要使用通道来实现您想要的:
func main() {
c := make(chan Response)
go func() {
res, err := example(a , b)
if err != nil {
c <- Response{
ErrCode: 1,
ErrMsg:"error",
}
}
}()
value := <-c
}
慕桂英546537
TA贡献1848条经验 获得超10个赞
您为跨越 go 例程而提供的函数在其签名中没有返回。Go 例程无法返回数据。运行 goroutine(异步)和从函数获取返回值本质上是矛盾的操作。简单地说,goroutine不知道在哪里返回数据。因此,它不允许这样做。
你可以做这样的事情:
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
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消
