Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Keluar dari Penyata Pilihan Apabila Semua Saluran Tutup?

Bagaimana untuk Keluar dari Penyata Pilihan Apabila Semua Saluran Tutup?

DDD
Lepaskan: 2024-11-15 13:31:03
asal
881 orang telah melayarinya

How to Gracefully Exit a Select Statement When All Channels Close?

Meloloskan diri daripada Penyata Pilihan apabila Berbilang Saluran Ditutup

Apabila menggunakan pernyataan pilih untuk pengendalian input serentak, adalah wajar untuk keluar dari gelung apabila semua saluran input telah ditutup. Coretan kod yang dibentangkan cuba menggunakan kes lalai untuk mengendalikan senario ini, tetapi ia tidak mencukupi kerana ia tidak dapat menjamin pengesanan yang tepat.

Penyelesaian yang lebih berkesan melibatkan menghapuskan saluran tertutup dalam pernyataan pilihan. Apabila saluran ditutup, ia diberikan nilai sifar, menunjukkan ia tidak lagi layak untuk dipilih. Pendekatan ini memastikan gelung akan diteruskan hanya selagi terdapat saluran aktif.

Pada dasarnya, kod yang diubah suai akan kelihatan seperti berikut:

for {
    var x, ok = <-ch1 // Receive from ch1
    fmt.Println("ch1", x, ok)
    if !ok {
        ch1 = nil // Nil closed channel
    }

    x, ok = <-ch2 // Receive from ch2
    fmt.Println("ch2", x, ok)
    if !ok {
        ch2 = nil // Nil closed channel
    }

    if ch1 == nil && ch2 == nil {
        break // Exit loop when all channels are nil
    }
}
Salin selepas log masuk

Penyelesaian ini mengendalikan pengesanan penutupan saluran dengan elegan tanpa memperkenalkan kebimbangan prestasi, memastikan pelaksanaan yang ringkas dan cekap. Apabila bilangan saluran input bertambah, pendekatan pengguguran kekal mudah, menjadikannya berskala untuk mengendalikan berbilang input.

Atas ialah kandungan terperinci Bagaimana untuk Keluar dari Penyata Pilihan Apabila Semua Saluran Tutup?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan