Junior — Middle
Sistemde kanallar aracılığıyla etkileşim ve veri aktarımını nasıl organize edilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, goroutine'ler arasındaki etkileşim genellikle kanallar (channels) aracılığıyla düzenlenir — veri iletimi için tiplenmiş boru hatları.
Veri iletmek için make(chan Tip) kullanılarak bir kanal oluşturulur. Goroutine'ler, <- operatörüyle kanala veri gönderebilir ve aynı operatörle kanaldan veri alabilirler, bu da senkronizasyonu sağlar.
Örnek:
package main
import (
"fmt"
"time"
)
func üretici(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i // veri gönderimi
time.Sleep(time.Millisecond * 500)
}
close(ch) // kanal kapatılır, tamamlandığını göstermek için
}
func tüketici(ch <-chan int) {
for val := range ch { // kanaldan veri alma
fmt.Println("Alındı:", val)
}
}
func main() {
ch := make(chan int)
go üretici(ch)
tüketici(ch)
}
Bu şekilde, kanallar güvenli ve verimli bir şekilde goroutine'ler arasında veri iletimine olanak tanır, yarış koşulları ve kilitlenmelerden kaçınılır.