Golang ゴルーチンを使用して複数のファイルを並行してダウンロードする
ゴルーチンを使用してファイルを並行してダウンロードして保存することは可能ですか?デモのために、Golang で書かれたコード スニペットを詳しく見てみましょう。
<code class="go">import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) ... func main() { ... var wg sync.WaitGroup for i, file := range flr.FileList { wg.Add(1) go download_file(file, tr, &wg) if i >= 2 { break } } wg.Wait() } ... func download_file(file File, token TokenResponse, wg *sync.WaitGroup) { ... wg.Done() }</code>
解決策の理解:
この問題は、メインのゴルーチンがすべてのゴルーチンの前に終了するために発生します。ファイルをダウンロードするために生成されたゴルーチンが完了しました。これを修正するために、実行中のゴルーチンの数を追跡する sync.WaitGroup が導入されました。メインのゴルーチンは終了する前に、すべてのゴルーチン (同時に実行されている) が完了するまで待機します。
各ゴルーチン内で、wg.Add メソッドはカウントをインクリメントし、新しいゴルーチンの作成を示します。ファイルが正常にダウンロードされた後、wg.Done メソッドが呼び出され、カウントがデクリメントされ、ゴルーチンの完了が通知されます。
すべてのゴルーチンが完了すると、メインのゴルーチンの wg.Wait() メソッドのロックが解除され、メインプログラムを続行できるようになります。
以上がここでは、ゴルーチンと並列ファイルのダウンロードを強調しながら、質問と回答の形式に焦点を当てた、提供された記事に基づくいくつかのタイトル オプションを示します。 **オプション 1 (ゴルーチンに焦点を当てる):**の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。