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") } }
Output:
Channel full. Discarding value
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 }
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!