Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Goroutine dan WaitGroups Boleh Digunakan untuk Muat Turun Berbilang Fail Secara serentak di Golang?
Memuat Turun Berbilang Fail Selari dengan Goroutine di Golang
Dalam artikel ini, kami akan meneroka cara menggunakan goroutine di Golang untuk memuat turun berbilang fail serentak dari lokasi terpencil.
Pertimbangkan coretan kod berikut, yang cuba memuat turun fail daripada Dropbox:
<code class="go">package main import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) ... func main() { ... for i, file := range flr.FileList { go download_file(file, tr) if i >= 2 { break } } ... }</code>
Walau bagaimanapun, apabila cuba melaksanakan kod ini menggunakan goroutine, ia gagal. Ini kerana goroutine utama keluar sebelum goroutine yang bertanggungjawab memuat turun fail telah menyelesaikan tugas mereka.
Untuk menangani isu ini dan memastikan goroutine utama menunggu goroutine selesai sebelum keluar, kami boleh menggunakan penyegerakan. WaitGroup, seperti berikut:
<code class="go">package main import ( ... "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() ... }</code>
Di sini, kami mencipta penyegerakan.WaitGroup dan menggunakannya untuk menjejaki bilangan goroutin yang belum menyelesaikan tugas mereka. Ini membolehkan goroutine utama menunggu sehingga semua goroutine menyelesaikan tugas mereka sebelum keluar.
Dalam fungsi fail_download yang diubah suai, kami memanggil wg.Done() untuk menandakan siapnya goroutine, mengurangkan kaunter wg.
Dengan menggunakan goroutines dan Waitgroup, kami boleh memuat turun berbilang fail secara serentak dengan berkesan, meningkatkan kecekapan keseluruhan proses muat turun.
Atas ialah kandungan terperinci Bagaimanakah Goroutine dan WaitGroups Boleh Digunakan untuk Muat Turun Berbilang Fail Secara serentak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!