Middle
Go-da kanallarda axın təhlükəsizliyi ilə nə edilə bilər və nə edilə bilməz?
sobes.tech Süni İntellekt
AI-dan cavab
Yapıla bilər:
- Məlumat göndərmək və qəbul etmək. Hər bir oxuma və yazma əməliyyatı atomikdir.
- Kanalı bağlamaq. Bağlama məlumatların göndərilməsinin tamamlandığını göstərir.
selectoperatorundan istifadə edərək çox kanallı qeyri-bloklayıcı qarşılıqlı əlaqə.- Müxtəlif sinxronizasiya ssenariləri üçün tamponlu və tampon olmayan kanallardan istifadə.
Yasak:
- Əlavə sinxronizasiya olmadan bir neçə goroutine-dən eyni zamanda kanalı bağlamaq. Bu panikaya səbəb ola bilər.
- Artıq bağlanmış kanalı bağlamaq. Bu da panikaya səbəb olacaq.
- Bağlanmış kanala məlumat göndərmək. Bu panikaya səbəb olacaq.
- Null (başlanmamış) kanaldan oxumağı gözləmək. Bu goroutine-i bloklayacaq.
- Null (başlanmamış) kanala yazmağı gözləmək. Bu goroutine-i bloklayacaq.
Kanal istifadəsi nümunəsi:
// int üçün tampon olmayan kanal yaradın
messages := make(chan int)
// Məlumat göndərən goroutine
go func() {
messages <- 1 // Kanala 1 göndər
messages <- 2 // Kanala 2 göndər
close(messages) // Göndərmədən sonra kanalı bağlayın
}()
// Kanaldan məlumat oxuyun
firstMessage := <-messages
secondMessage := <-messages
// Bağlanmış kanaldan oxumaq sıfır dəyər və ok=false qaytarır
value, ok := <-messages