Sobes.tech
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.
  • select operatorundan 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