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.
selectoperatö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