Rumah  >  Artikel  >  pembangunan bahagian belakang  >  **Mengapa Program Golang Saya Menggunakan WaitGroup dan Saluran Berjalan Tanpa Had?**

**Mengapa Program Golang Saya Menggunakan WaitGroup dan Saluran Berjalan Tanpa Had?**

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 09:46:29767semak imbas

**Why Does My Golang Program Using WaitGroup and Channels Run Indefinitely?**

WaitGroup dan Penggunaan Saluran dalam Program Golang

Program Golang ini menggunakan sync.WaitGroup dan saluran untuk mencapai pelaksanaan goroutine dan pengumpulan data yang cekap. Walau bagaimanapun, ia menghadapi isu di mana program tidak keluar selepas menyelesaikan tugasnya. Artikel ini menyelidiki masalah dan menyediakan penyelesaian.

Program ini melibatkan mendapatkan semula sebut harga saham untuk senarai simbol dan kemudian menyimpan hasilnya ke fail. Ia menggunakan gabungan goroutine dan saluran untuk melaksanakan proses pengambilan secara serentak, dengan WaitGroup untuk menjejaki penyempurnaan semua tugasan. Walau bagaimanapun, program jatuh ke dalam gelung tak terhingga kerana saluran fetchedSymbols kekal terbuka selama-lamanya.

Untuk menyelesaikan isu ini, atur cara perlu menutup saluran fetchedSymbols selepas semua goroutine menyelesaikan tugas mereka. WaitGroup, yang sudah menjejaki penyiapan goroutine, boleh digunakan untuk tujuan ini. Dengan menambahkan pembungkus go func() yang menutup saluran apabila WaitGroup mencapai sifar, isu itu diselesaikan.

Bahagian kod yang diubah suai adalah seperti berikut:

<code class="go">...
go func() {
    wg.Wait()
    close(fetchedSymbols)
}()

for response := range fetchedSymbols {
    fmt.Println("fetched " + response)
}

...</code>

Go yang ditambahkan func() rutin menunggu WaitGroup mencapai sifar, menunjukkan bahawa semua goroutine telah menyelesaikan tugas mereka. Ia kemudian menutup saluran fetchedSymbols, membenarkan gelung julat dalam utama keluar seperti yang dijangkakan dan membenarkan atur cara untuk menyelesaikan pelaksanaan.

Program yang dipertingkatkan ini menggunakan WaitGroup dan saluran secara berkesan untuk pelaksanaan goroutine serentak dan pengambilan data, dan ia keluar. dengan anggun selepas menyelesaikan semua tugasan yang diperlukan.

Atas ialah kandungan terperinci **Mengapa Program Golang Saya Menggunakan WaitGroup dan Saluran Berjalan Tanpa Had?**. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn