Middle
Go-da bağlanmış kanalla nə etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Bağlı kanalın oxunması zamanı, bağlanmadan əvvəl yazılmış bütün qalan məlumatları əldə edə bilərsiniz. Kanal boşaldıqdan sonra, növbəti oxuma əməliyyatları kanal elementinin tipində null dəyər və ikinci olaraq false dəyərini qaytaracaq, bu da kanalın bağlı olduğunu göstərir.
Bağlı kanala məlumat göndərmək icra zamanı panikaya səbəb olacaq.
Artıq bağlı olan kanalı bağlamağa cəhd etmək də icra zamanı panikaya səbəb olacaq.
Bir kanalın bağlı olub olmadığını ok operatoru ilə oxuyaraq yoxlaya bilərsiniz:
package main
import (
"fmt"
)
func main() {
ch := make(chan int, 2)
ch <- 1
ch <- 2
close(ch)
// Kanal bağlıdırsa, onu boşaltmaq üçün oxuma
val1, ok1 := <-ch
fmt.Printf("Dəyər: %d, Ok: %t\n", val1, ok1) // Dəyər: 1, Ok: true
val2, ok2 := <-ch
fmt.Printf("Dəyər: %d, Ok: %t\n", val2, ok2) // Dəyər: 2, Ok: true
// Kanal boşaldıqdan sonra oxuma
val3, ok3 := <-ch
fmt.Printf("Dəyər: %d, Ok: %t\n", val3, ok3) // Dəyər: 0, Ok: false
// Bağlı kanala məlumat göndərməyə cəhd (panic yaradacaq)
// ch <- 3 // Bu sətri şərhə alın, panic yaranacaq
// Artıq bağlı olan kanalı bağlamağa cəhd (panic yaradacaq)
// close(ch) // Bu sətri şərhə alın, panic yaranacaq
}
range ilə bağlı kanal istifadə edərək, məlumatlar ardıcıl şəkildə oxuna bilər, kanal boşalana qədər və sonra döngü avtomatik olaraq sona çatır.
package main
import (
"fmt"
)
func main() {
ch := make(chan int, 3)
ch <- 10
ch <- 20
close(ch)
// Bağlı kanal ilə range istifadə
for val := range ch {
fmt.Println(val) // 10, sonra 20 çap edəcək
}
}