GUI (Grafiksel Kullanıcı Arayüzü)
Select
Select ile çoklu goroutine işlemlerinin iletişimini bekleyebiliriz. Örneğimizi görelim:
1
package main
2
import (
3
"fmt"
4
"time"
5
)
6
func main() {
7
k1 := make(chan string)
8
k2 := make(chan string)
9
go func() {
10
time.Sleep(time.Second * 1)
11
k1 <- "video"
12
}()
13
go func() {
14
time.Sleep(time.Second * 3)
15
k2 <- "ses"
16
}()
17
for i := 0; i < 2; i++ {
18
select {
19
case mesaj1 := <-k1:
20
fmt.Println("Mesaj 1:", mesaj1)
21
case mesaj2 := <-k2:
22
fmt.Println("Mesaj 2:", mesaj2)
23
}
24
}
25
}
Copied!
Yukarıdaki kodların bize ses ve video verisi sağlayacak bir programdan parça olduğu senaryosunu kuralım. Bu programda işlem yapabilmemiz için bize bu 2 verinin gelmesini beklememiz lazım. Verileri bekleme işlemini select ile yapıyoruz. Burada dikkat etmemiz gereken nokta 2 tane veri beklediğimiz için for atamalarında i < 2 olarak girmeliyiz. Çünkü i := 0 olduğu için i 2 olana kadar arada 2 sayı var. Bu sayı boşluğu da 2 veri almayı beklememizi sağlıyor. Örnek olarak i < 1 girip 2 veri almaya kalksak k2‘den gelen veriyi beklemeyecek bile. Tam tersi olarak 2 veri alacağımız halde i < 4 girsek program deadlock‘a girecektir. Yani başarısız bir program olacaktır.
Last modified 1yr ago
Copy link