Golang timeouts

Yazdığımız programlarda zaman aşımı gerektiği zaman aşağıdaki gibi kullanabiliriz. Bu yaptığım örnek timeouts ‘u anlamak için güzel bir örnek oldu gibi.

Aşağıdaki programda şunu yapıyor;

cRand isminde bir channel oluşturduk.

Sonra random random ayıyla cRand’ı parametre olarak alan bi fonksiyon oluşturduk ve onu main fonksiyonumuzda goroutine olarak tanımladık.

Burada random fonksiyonumuzda sozsuz for döngüsü açtık ve içinde 100000000 e kadar random oluşturup a ya atasın dedik ve a 13 değeri alır almaz cRand channel’ına a yı atadık.

Bu arada main fonksiyonda programımız goroutine ‘den select’e girmişti zaten.Select içinde iki case de pusuya yatmış bekliyordu. Biri diyordu nerede benim cRand channel’im bir diğeri 3 saniye saymaya başladım 3 saniye içinde gelmezse senin cRand’ını öperim diyordu.

Sonuçta timeout’a düşer mi düşmez mi bilinmez ama böyle bi kullanımda random fonksiyonunun yerine sunucu bağlantısı için süre sınırlaması yapılabilir.

Oh be bitti anlatırken yoruldum. Bunu youtube kanalımda da anlatırım muhtemelen. İlgileniyorsanız abone olunda ilgilenenler var diye bende sevineyim.

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func random(cRand chan<- int)  {
	for {
		if a:= rand.Intn(100000000); a== 13{
			cRand <- a
		}

	}
}


func main() {
    cRand := make(chan int)
	go random(cRand)

	select{
	case   <- time.After(3 * time.Second) :
	   fmt.Println("3 saniye icinde bulamadım")
	case  <- cRand :
		fmt.Println("3 saniye icinde buldu")
	}

}
alierbey | 11/11/2016

Leave a Reply