Memecahkan Penyata Pilihan Apabila Semua Saluran Ditutup
Soalan:
Bagaimana bolehkah anda dengan cekap mengulangi berbilang gorouti bebas yang menghasilkan data melalui saluran sehingga semua saluran ditutup dan berhenti menggunakan apabila saluran kehabisan output mereka?
Jawapan:
Menggunakan pernyataan pilihan biasanya menggunakan data daripada berbilang saluran, tetapi menentukan bila semua saluran telah ditutup boleh menjadi mencabar. Berikut ialah cara ringkas untuk menangani perkara ini:
for { select { case p, ok := <-mins: if !ok { // channel is closed mins = nil // set channel to nil } else { fmt.Println("Min:", p) } case p, ok := <-maxs: if !ok { maxs = nil } else { fmt.Println("Max:", p) } } if mins == nil && maxs == nil { break // exit loop when all channels are nil } }
Caranya di sini ialah untuk menetapkan saluran tertutup kepada sifar untuk mengelak daripada memilihnya lagi. Ini memastikan penyataan pilihan terus berjalan dan menyemak baki saluran terbuka.
Kelebihan:
Atas ialah kandungan terperinci Bagaimana Memecahkan Penyata Pilihan Apabila Semua Saluran Ditutup?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!