Middle
Go'da kanal nedir? Hangi tür kanallar vardır? Bufferli ve buffer'siz kanallar arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde kanal, goroutine'lar arasında değer iletmek için kullanılan bir veri türüdür ve senkronizasyon ile veri alışverişini sağlar.
Kanal türleri:
- Hafif kanallar (bufferesiz) — dahili tamponu yoktur, gönderim, alıcı değeri okuyana kadar bloklanır.
- Tamponlu kanallar — sabit boyutlu dahili tamponu vardır ve tampon dolduğunda gönderim bloklanır.
Farklar:
- Hafif kanallarda, gönderen ve alıcı aynı anda hazır olmalı, bu da katı senkronizasyon sağlar.
- Tamponlu kanallarda, gönderen, tampon dolana kadar birkaç değer koyabilir, alıcıyı beklemeden.
Örnek: Tamponlu kanal oluşturma ve kullanma:
ch := make(chan int, 2) // 2 öğe tamponu
ch <- 1
ch <- 2
// ch <- 3 // tampon dolduğunda bloklar
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2