Sobes.tech
Junior — Middle

Go dilində bağlanmış kanalla necə idarə etmək və ya onla qarşılıqlı əlaqə qurmaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da, bağlı olmayan kanal (buffersiz kanal) buffersiz olmayan və göndərənlə qəbul edən arasında sinxronizasiya edən kanaldır. Belə bir kanal ilə aşağıdakı üsullarla idarə etmək və ya qarşılıqlı əlaqə qurmaq mümkündür:

  • Göndərmə və qəbul: Göndərən, qəbul edən dəyəri oxuyana qədər bloklanır və əksinə.
  • Kanalın bağlanması: close(channel) funksiyası ilə kanal bağlana bilər. Bağlandıqdan sonra dəyərlər göndərilə bilməz, lakin qalan dəyərlər oxuna bilər və null dəyərlər alınar.
  • Bağlanıb-bağlanmadığını yoxlama: Kanaldan oxuyarkən, onun bağlanıb-bağlanmadığını ikinci parametr vasitəsilə yoxlamaq olar:
v, ok := <-ch
if !ok {
    // kanal bağlanıb
}
  • select istifadə: Bloklamayan qarşılıqlı əlaqələr və ya vaxt aşımı üçün select quruluşundan istifadə etmək olar.

Nümunə:

ch := make(chan int) // bağlanmış kanal

// Göndərmə
go func() {
    ch <- 42
}()

// Qəbul
val := <-ch

// Bağlama
close(ch)

// Yoxlama
v, ok := <-ch
if !ok {
    fmt.Println("Kanal bağlanıb")
}