Kanallar (Channels)
Kanallar, Go dilinde asenkron programlama yaparken değer aktarımı yapabileceğimiz hatlardır. Kanala değer atanması iş parçacığı tarafından bekleneceği için asenkron işlemler arasındaki senkronizasyonu ayarlayabiliriz. Kanallar make()
fonksiyonu ile oluşturulur.
Yukarıdaki örnekte make()
fonksiyonu ile k
isminde bir kanal oluşturduk. Bu kanalın özelliği bool
tipinde değer taşımasıdır. Yani bu kanal ile true
veya false
değerlerini taşıyabiliriz. Kanala değer göndermek için <-
işaretini kullanırız. Yani bir nevi atama işlemi yapıyoruz. Atama işleminden farkı, kanala atama işlemi yapılana kadar iş parçacığının devam etmemesidir.
Atama işlemi ile kanalımıza değer yolladık. Bir de bu kanalın çıkış noktası olması gerekir. Bu çıkış noktasında, ister kanaldan gelen veriyi bir değişkene atayabiliriz, istersek de sadece kanala veri gelmesini bekleyebiliriz.
Yukarıdaki örnekte a
isimli değişkene k
kanalından gelen bool
tipinde değer atadık. a
değişkenine atama işlemi k
kanalına değer gönderildiği zaman yapılacaktır. Yani k
kanalına değer gelene kadar iş parçacığı duraklatılacaktır. (Program k
kanalına gelecek değeri bekler.)
Yukarıdaki anlatılanlardan yola çıkarak bir örnek oluşturalım.
Boyutlu Kanal Oluşturma
Oluşturduğumuz kanala boyut vermek de mümkün. Yani kanalımıza birden fazla değer yollayabiliyoruz. Bunun için kanalı oluştururken make()
fonksiyonunda boyutu da belirtelim.
Ana iş parçacığı (main()
içerisine yazılan kodlar) devam etmek için k
kanalına gelen 2 değeri de bekleyecektir.
fmt.Println()
içerisine sadece bir defa <-k
yazsaydık, k
kanalına ilk gelen değeri ekrana bastıracaktı.
Last updated