Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menutup Saluran Go yang Tidak Diketahui Panjangnya dengan Anggun?
Apabila bekerja dengan saluran dalam Go, adalah penting untuk menentukan masa yang sesuai untuk menutupnya. Ini memberikan cabaran apabila panjang saluran tidak diketahui.
Pertimbangkan senario berikut:
package main import ( "fmt" "time" ) func main() { ch := make(chan int) go func() { for i := 0; i < 100; i++ { ch <- i } close(ch) }() for v := range ch { fmt.Println(v) } }
Dalam contoh ini, goroutine menghantar 100 nilai ke saluran, dengan niat untuk menutupnya apabila semua nilai telah dihantar. Walau bagaimanapun, pendekatan ini menimbulkan kebimbangan. Khususnya:
Untuk menangani isu ini, penyegerakan.WaitGroup boleh digunakan untuk menyegerakkan penutupan saluran dengan penyiapan goroutine penghantaran.
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup ch := make(chan int) wg.Add(1) // Increment counter for sender goroutine go func() { defer wg.Done() // Decrement counter when goroutine completes for i := 0; i < 100; i++ { ch <- i } close(ch) }() go func() { wg.Wait() // Wait until the sender goroutine completes close(ch) // Close the channel after all values have been sent }() for v := range ch { fmt.Println(v) } }
Atas ialah kandungan terperinci Bagaimana untuk Menutup Saluran Go yang Tidak Diketahui Panjangnya dengan Anggun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!