在使用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 關注
- 96 瀏覽
添加回答
舉報
0/150
提交
取消