GoLang ile Channels Kullanımı
Golang bünyesinde asenkron programlama yaparken goroutines kullanıldığını önceki yazımızda bahsetmiştik.
Fakat goroutines yapıları pratik olarak görünse de görevlerini tamamladıklarında “ben bu işi bitirdim, patron” gibi bir geri bildirim vermediklerinden sessizce işlerini tamamlayıp sizi merak içinde bırakabilirler.
Bu durumda ise channel yöntemi bize kolaylık sağlıyor.
Bir Channel goroutines ile iletişim kurup eşzamanlı çalışan iş parçaları arasında senkronizasyonu sağlayabilir.
Basit bir örnek ile konuyu incelersek…
package channels
import (
"fmt"
"time"
)
func CiftSayilar(ciftSayiCn chan int) {
toplam := 0
for i := 0; i <= 10; i += 2 {
toplam = toplam + i
fmt.Println("Çift Sayılar Çalışıyor")
time.Sleep(time.Nanosecond)
}
ciftSayiCn <- toplam
}
func TekSayilar(tekSayiCn chan int) {
toplam := 0
for i := 1; i <= 10; i += 2 {
toplam = toplam + i
fmt.Println("Tek Sayılar Çalışıyor")
time.Sleep(time.Nanosecond)
}
tekSayiCn <- toplam
}
ve main.go dosyamız da
package main
import (
"fmt"
"golesson/channels"
)
func main() {
ciftSayiCn := make(chan int)
tekSayiCn := make(chan int)
go channels.TekSayilar(tekSayiCn)
go channels.CiftSayilar(ciftSayiCn)
ciftSayiToplam, tekSayiToplam := <-ciftSayiCn, <-tekSayiCn
carpim := ciftSayiToplam * tekSayiToplam
fmt.Println("Çarpım :", carpim)
}
şeklinde olacaktır.
Örnek ekran çıktımız ise;
D:\Projeler\Go>go run main.go
Çift Sayılar Çalışıyor
Tek Sayılar Çalışıyor
Tek Sayılar Çalışıyor
Çift Sayılar Çalışıyor
Çift Sayılar Çalışıyor
Tek Sayılar Çalışıyor
Tek Sayılar Çalışıyor
Çift Sayılar Çalışıyor
Tek Sayılar Çalışıyor
Çift Sayılar Çalışıyor
Çift Sayılar Çalışıyor
Çarpım : 750