- Katılım
- 7 Ocak 2026
- Mesajlar
- 234
- Tepkime puanı
- 2
- Puanları
- 18
Hafızayı Paylaşma, İletişim Kur!
Çoklu thread programlamada en büyük bela "Race Condition"dır (Aynı veriye aynı anda yazmaya çalışmak). Go'nun mottosu şudur: "Hafızayı paylaşarak iletişim kurmayın; iletişim kurarak hafızayı paylaşın."Kanal (Channel), Goroutine'ler arasında veri taşıyan bir boru hattıdır.
Kanal Oluşturma ve Kullanma
Kanal, chan tipiyle ve make ile oluşturulur. <- operatörü ile veri gönderilir ve alınır.
Kod:
package main
import "fmt"
func main() {// String taşıyan bir kanal oluşturmesajKutusu := make(chan string)
// Arka planda çalışacak bir fonksiyon (Goroutine)<br>go func() {<br> fmt.Println("Goroutine işe başladı...")<br> // Kanala veri gönderiyoruz<br> mesajKutusu <- "Merhaba Ana Program!" <br>}()<br><br>// Kanaldan veri gelene kadar burası BLOKE olur (Bekler)<br>gelenMesaj := <-mesajKutusu<br><br>fmt.Println("Gelen Mesaj:", gelenMesaj)<br>
}
Blocking (Bloklama) Özelliği
Varsayılan kanallar (Unbuffered) senkrondur.- Veri gönderen (ch <- data), karşı taraf alana kadar bekler.
- Veri alan (data := <-ch), karşı taraf gönderene kadar bekler.Bu özellik, time.Sleep kullanmadan senkronizasyon yapmanızı sağlar.