master
1package main
2
3import (
4 "fmt"
5 "io"
6 "os"
7 "time"
8)
9
10type Sleeper interface {
11 Sleep()
12}
13
14type DefaultSleeper struct{}
15
16func (d *DefaultSleeper) Sleep() {
17 time.Sleep(1 * time.Second)
18}
19
20const finalWord = "Go!"
21const countdownStart = 3
22
23func Countdown(out io.Writer, sleeper Sleeper) {
24 for i := countdownStart; i > 0; i-- {
25 sleeper.Sleep()
26 fmt.Fprintln(out, i)
27 }
28
29 sleeper.Sleep()
30 fmt.Fprint(out, finalWord)
31}
32
33func main() {
34 sleeper := &DefaultSleeper{}
35 Countdown(os.Stdout, sleeper)
36}