Sobes.tech
Middle

Go'daki kanallarda akış güvenliği ile ne yapılabilir ve ne yapılamaz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yapabilir:

  • Veri göndermek ve almak. Her okuma ve yazma işlemi atomiktir.
  • Kanalı kapatmak. Kapanış, veri gönderiminin tamamlandığını gösterir.
  • select operatörünü kullanarak çoklu kanallarla bloklamadan etkileşim kurmak.
  • Farklı senkronizasyon senaryoları için tamponlu ve tamponsuz kanalları kullanmak.

Yapılamaz:

  • Ekstra senkronizasyon olmadan aynı anda birkaç goroutine'den bir kanalı kapatmak. Bu panik ile sonuçlanabilir.
  • Zaten kapatılmış bir kanalı kapatmak. Bu da panik ile sonuçlanır.
  • Kapanmış bir kanala veri göndermek. Bu panik ile sonuçlanır.
  • Sıfır (başlatılmamış) bir kanaldan okuma beklemek. Bu goroutine'i engeller.
  • Sıfır (başlatılmamış) bir kanala yazma beklemek. Bu goroutine'i engeller.

Kanal kullanımı örneği:

// int için tamponsuz bir kanal oluştur
messages := make(chan int)

// Veri göndermek için goroutine
go func() {
	messages <- 1 // Kanala 1 gönder
	messages <- 2 // Kanala 2 gönder
	close(messages) // Gönderim sonrası kanalı kapat
}()

// Kanaldan veri okuma
firstMessage := <-messages
secondMessage := <-messages

// Kapanmış bir kanaldan okuma, sıfır değeri ve ok=false döner
value, ok := <-messages