2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
您需要使用通道來實(shí)現(xiàn)您想要的:
func main() {
c := make(chan Response)
go func() {
res, err := example(a , b)
if err != nil {
c <- Response{
ErrCode: 1,
ErrMsg:"error",
}
}
}()
value := <-c
}

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
您為跨越 go 例程而提供的函數(shù)在其簽名中沒有返回。Go 例程無法返回?cái)?shù)據(jù)。運(yùn)行 goroutine(異步)和從函數(shù)獲取返回值本質(zhì)上是矛盾的操作。簡(jiǎn)單地說,goroutine不知道在哪里返回?cái)?shù)據(jù)。因此,它不允許這樣做。
你可以做這樣的事情:
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 關(guān)注
- 107 瀏覽
添加回答
舉報(bào)