Golang

2016-04-22 11 views
1

で2つの同時ネットワーク要求を行うためにはどのようにネットワーク要求を行う二つの機能を持っている:Golang

例:

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

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

彼らは二つの異なるタイプが、私はただ一つのチャネルを使用することはできません、していることを考えると。 は、呼び出しに並列化するための最良のパターンとは何ですか:

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

を使用してください。 –

答えて

2

はあなたがちょうどそれらを並行させるために、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 'wr.Wait()'の後に 'errA'と' errB'をチェックし、エラー時に何をしたいのですか? – user2172816