2016-04-22 60 views
1

我有兩個功能,使網絡的請求:如何使2個併發網絡請求中Golang

如:

func request1() (resultTypeA, error) { 
    .... 
} 

func request2() (requestTypeB, error) { 
    ... 
} 

鑑於它們是兩個不同類型的,我不能只用一個通道。 什麼是並行到呼叫的最佳模式:

resultA, err := request1() 
resultB, err := request2() 
+1

你可能只是創建兩個夠程,使他們並行。 –

回答

2

使用sync.WorkGroup

var wg sync.WorkGroup 
wg.Add(2) 
var resultA resultTypeA, errA error 
go func() { 
    resultA, errA = request1() 
    wg.Done() 
}() 
var resultB resultTypeB, errB error 
go func() { 
    resultB, errB = request2() 
    wg.Done() 
}() 
wg.Wait() 

if errA != nil { 
    return errA 
} 
if errB != nil { 
    return errB 
} 
+0

你能提供一個錯誤處理的例子嗎?例如如果它們中的任何一個返回錯誤,則終止 – samol

+0

@samol您可以在'wg.Wait()'之後檢查'errA'和'errB',並在出錯時執行所需操作。 – user2172816