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
selectquruluş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")
}