Menyahpepijat "golang sync.WaitGroup never completes" Isu
Dalam program Go serentak, sync.WaitGroup memastikan goroutin utama menunggu yang lain goroutine untuk menyelesaikan pelaksanaan. Walau bagaimanapun, dalam beberapa kes, goroutine utama mungkin tergantung selama-lamanya, menunjukkan bahawa WaitGroup tidak berfungsi seperti yang diharapkan.
Salah satu sebab untuk isu ini ialah penggunaan WaitGroup yang tidak betul. Dalam kod di bawah, ralatnya ialah fungsi muat turunFromURL menghantar salinan WaitGroup, bukan penunjuk:
func main() { ... go downloadFromURL(url, wg) ... }
Ini menghalang kaedah Selesai daripada menandakan WaitGroup dalam goroutine utama. Untuk membetulkannya, hantarkan penunjuk:
func main() { ... go downloadFromURL(url, &wg) ... }
Ralat lain ialah kaedah Selesai tidak dipanggil cukup awal dalam fungsi muat turunFromURL. Jika ralat berlaku dan fungsi kembali sebelum Selesai dipanggil, WaitGroup tidak akan mendaftarkan penyiapan. Letakkan Selesai sebagai salah satu pernyataan pertama:
func downloadFromURL(url string, wg *sync.WaitGroup) error { defer wg.Done() ... }
Dengan memastikan WaitGroup digunakan dengan betul, anda boleh mengelakkan kebuntuan dan memastikan program keluar seperti yang diharapkan.
Atas ialah kandungan terperinci Mengapa My Go sync.WaitGroup Tidak Pernah Selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!