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 ---- 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. For more options, visit https://groups.google.com/d/optout.