Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menentukan Apabila Semua Saluran dalam Penyata Go Select Ditutup?

Bagaimana untuk Menentukan Apabila Semua Saluran dalam Penyata Go Select Ditutup?

Patricia Arquette
Lepaskan: 2024-11-17 06:43:03
asal
452 orang telah melayarinya

How to Determine When All Channels in a Go Select Statement are Closed?

Menentukan Apabila Semua Saluran dalam Penyata Pilihan Ditutup

Apabila bekerja dengan saluran Go, adalah perkara biasa untuk menggunakan data daripada berbilang saluran secara serentak menggunakan pernyataan pilih. Walau bagaimanapun, menentukan masa semua saluran telah ditutup dan harus menamatkan gelung boleh menjadi mencabar.

Pendekatan Biasa

Pendekatan mudah melibatkan penggunaan kes lalai dalam pernyataan pilih. Walau bagaimanapun, ini boleh memperkenalkan isu masa jalan yang berpotensi jika kes lalai dicetuskan secara tidak sengaja semasa saluran masih dibuka.

for {
    select {
    case p, ok := <-mins:
        if ok {
            fmt.Println("Min:", p)
        }
    case p, ok := <-maxs:
        if ok {
            fmt.Println("Max:", p)
        }
    default:
        // May not be reliable if channels are still open
        break
    }
}
Salin selepas log masuk

Saluran Tiada

Penyelesaian yang lebih berkesan ialah dengan gunakan hakikat bahawa saluran nil tidak pernah bersedia untuk komunikasi. Ini membolehkan kami menetapkan saluran kepada sifar sebaik sahaja ia ditutup, dengan berkesan mengalih keluarnya daripada pertimbangan gelung pilihan.

for {
    select {
    case p, ok := <-mins:
        fmt.Println("Min:", p)
        if !ok {
            mins = nil
        }
    case p, ok := <-maxs:
        fmt.Println("Max:", p)
        if !ok {
            maxs = nil
        }
    }

    if mins == nil && maxs == nil {
        break
    }
}
Salin selepas log masuk

Mengekalkan Keringkas

Walaupun pendekatan ini mungkin kelihatan bertele-tele untuk mengendalikan sejumlah besar saluran, ia memastikan penyelesaian yang ringkas dan boleh dipercayai. Tidak mungkin satu goroutine akan berfungsi secara serentak dengan bilangan saluran yang berlebihan, menjadikan ketidakupayaan sebagai kebimbangan yang jarang berlaku.

Dengan menggunakan teknik saluran nil, anda boleh menamatkan gelung terpilih dengan cekap apabila semua saluran telah ditutup, memastikan bahawa gorouti anda kekal responsif dan bebas daripada kebocoran sumber.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Apabila Semua Saluran dalam Penyata Go Select Ditutup?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan