diff --git a/src/timers/timers.go b/src/timers/timers.go index f87efe3..29f815c 100644 --- a/src/timers/timers.go +++ b/src/timers/timers.go @@ -1,24 +1,43 @@ // ## Timers +// We often want to execute Go code at some point in the +// future, or repeatedly at some interval. Go's built-in +// timer and ticker features make both of these tasks +// easy. First we'll look at timers. + package main import "time" import "fmt" func main() { - timer1 := time.NewTimer(time.Second) + + // Timers represent a single event in the future. You + // tell the timer how long you want to wait, and it + // provides a channel that will be notified at that + // time. This timer will wait 2 seconds. + timer1 := time.NewTimer(time.Second * 2) + + // The `<-timer1.C` blocks on the timer's channel `C` + // until it sends a value indicating that the timer + // expired. <-timer1.C fmt.Println("Timer 1 expired") - stop1 := timer1.Stop() - fmt.Println("Timer 2 stopped:", stop1) + // If you just wanted to wait, you could have used + // `time.Sleep`. One reason a timer may be useful is + // that you can cancel the timer before it expires. timer2 := time.NewTimer(time.Second) go func() { <-timer2.C fmt.Println("Timer 2 expired") }() - stop2 := timer2.Stop() - fmt.Println("Timer 2 stopped:", stop2) -} -// todo: pull from blog post + // In this case we'll cancel the timer before it has a + // change to expire (`.Stop()` would return `false` if + // we tried to cancel it after it expired). + stop2 := timer2.Stop() + if stop2 { + fmt.Println("Timer 2 stopped") + } +} diff --git a/src/timers/timers.sh b/src/timers/timers.sh new file mode 100644 index 0000000..79f462d --- /dev/null +++ b/src/timers/timers.sh @@ -0,0 +1,3 @@ +$ go run timers.go +Timer 1 expired +Timer 2 stopped diff --git a/src/timers/tiners.sh b/src/timers/tiners.sh deleted file mode 100644 index d43f75f..0000000 --- a/src/timers/tiners.sh +++ /dev/null @@ -1,4 +0,0 @@ -$ go run timers.go -Timer 1 expired -Timer 2 stopped: false -Timer 2 stopped: true