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

Bagaimana untuk Keluar dari Penyata Pilihan Apabila Semua Saluran Tutup?

DDD
DDDasal
2024-11-15 13:31:03785semak imbas

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
    }
}

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!

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