Thanks Caleb, this is looks more idiomatic Go.

> On 29-Dec-2016, at 17:14, Caleb Doxsey <ca...@doxsey.net> wrote:
> 
> Use time.After:
> 
>     package main
> 
>     import (
>       "log"
>       "math/rand"
>       "time"
>     )
> 
>     func randomSleep(min, max int64) <-chan time.Time {
>       rand.Seed(time.Now().UnixNano())
>       sleepDuration := time.Duration(rand.Int63n(max-min)+min) * 
> time.Millisecond
>       log.Printf("Sleep duration: %v\n", sleepDuration)
>       return time.After(sleepDuration)
>     }
> 
>     func main() {
>       select {
>       case <-time.After(1000 * time.Millisecond):
>               log.Println("time after chan triggered")
>       case <-randomSleep(1000, 2000):
>               log.Println("rand sleep triggered")
>       }
>     }
> 
> https://play.golang.org/p/nHOPEJ8URz
> 
> On Wednesday, December 28, 2016 at 2:46:03 PM UTC-5, Abhishek Singh wrote:
> Hi,
> 
> Below is a sample example, where I'm trying to understand behaviour of select 
> statement. I was hoping the time.After() case clause to succeed but 
> observation is that either of those clauses are executed intermittently. 
> Would help if someone could share what's going on.
> 
> func randomSleep(min, max int64) time.Duration {
>       rand.Seed(time.Now().UnixNano())
>       sleepDuration := time.Duration(rand.Int63n(max-min)+min) * 
> time.Millisecond
>       log.Printf("Sleep duration: %v\n", sleepDuration)
>       time.Sleep(sleepDuration)
>       return sleepDuration
> }
> 
> func main() {
>       sendCh := make(chan time.Duration, 1)
>       select {
>       case <-time.After(1000 * time.Millisecond):
>               log.Println("time after chan triggered")
>       case sendCh <- randomSleep(1000, 2000):
>               log.Println("rand sleep triggered")
>       }
> }
> 
> Go Playground - https://play.golang.org/p/6SosvxOUGL 
> <https://play.golang.org/p/6SosvxOUGL>
> 
> ----
> 
> I understand, I could workaround this behaviour via:
> 
> func main() {
>       sendCh := make(chan time.Duration, 1)
>       go func () { sendCh <- randomSleep(1000, 2000) }()
>       select {
>       case <-time.After(1000 * time.Millisecond):
>               log.Println("time after chan triggered")
>       case <-sendCh:
>               log.Println("rand sleep triggered")
>       }
> }
> 
> Thanks.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to