GoLang ile Channels Kullanımı

GoLangGolang 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