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.