Channels: Goroutine'ler Arasında Güvenli Mesajlaşma

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
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 &lt;- "Merhaba Ana Program!" <br>}()<br><br>// Kanaldan veri gelene kadar burası BLOKE olur (Bekler)<br>gelenMesaj := &lt;-mesajKutusu<br><br>fmt.Println("Gelen Mesaj:", gelenMesaj)<br>
}

Blocking (Bloklama) Özelliği​

Varsayılan kanallar (Unbuffered) senkrondur.
  1. Veri gönderen (ch &lt;- data), karşı taraf alana kadar bekler.
  2. Veri alan (data := &lt;-ch), karşı taraf gönderene kadar bekler.Bu özellik, time.Sleep kullanmadan senkronizasyon yapmanızı sağlar.

Sonuç​

Kanallar, Go'nun karmaşık eşzamanlılık problemlerini (Concurrency Patterns) basitçe çözmesini sağlayan en güçlü aracıdır.
 
Geri
Üst