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
}
我有一个函数在使用 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
}