Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Semak dengan Cekap sama ada Saluran Go Buffered Telah Penuh?

Bagaimanakah Saya Boleh Semak dengan Cekap sama ada Saluran Go Buffered Telah Penuh?

Linda Hamilton
Lepaskan: 2024-12-14 11:14:10
asal
423 orang telah melayarinya

How Can I Efficiently Check if a Go Buffered Channel is Full?

Cara Semak sama ada Saluran Penimbal Telah Penuh

Dalam Go, saluran penimbal mempunyai kapasiti terhad untuk menyimpan data. Apabila saluran penuh, menghantar data kepadanya akan menyekat pengirim. Walau bagaimanapun, jika anda ingin menggugurkan data dan bukannya menyekat, bagaimana anda boleh menentukan sama ada saluran itu penuh?

Penyelesaian menggunakan Pernyataan Pilih

Satu cara untuk menyemak sama ada saluran penimbal penuh adalah untuk menggunakan pernyataan pilih dengan kes lalai. Jika tiada kes boleh dilaksanakan, seperti menghantar data ke saluran penuh, kes lalai akan dilaksanakan.

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    // Fill it up
    ch <- 1

    select {
    case ch <- 2: // Put 2 in the channel unless it is full
    default:
        fmt.Println("Channel full. Discarding value")
    }
}
Salin selepas log masuk

Output:

Channel full. Discarding value
Salin selepas log masuk

Kod ini mencipta saluran penimbal bersaiz 1 dan menghantar nilai untuk mengisinya. Pernyataan pilih kemudian cuba menghantar nilai lain ke saluran. Jika saluran penuh, kes lalai akan dilaksanakan, mencetak mesej dan membuang nilai.

Semak tanpa Menghantar

Sebagai alternatif, anda boleh menyemak bilangan elemen beratur dalam saluran menggunakan len(ch). Ini membolehkan anda menentukan sama ada saluran penuh tanpa cuba menghantar data.

if len(ch) == cap(ch) {
    // Channel was full, but might not be by now
} else {
    // Channel wasn't full, but might be by now
}
Salin selepas log masuk

Walau bagaimanapun, ambil perhatian bahawa keputusan perbandingan mungkin menjadi tidak sah apabila anda memasuki blok if disebabkan aliran data serentak .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Semak dengan Cekap sama ada Saluran Go Buffered Telah Penuh?. 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