Sobes.tech
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
	}
}