2024-05-31 11:32:55 -04:00

43 lines
574 B
Go

package main
import (
"fmt"
"io"
"os"
"time"
)
type Sleeper interface {
Sleep()
}
type SpySleeper struct {
Calls int
}
func (s *SpySleeper) Sleep() {
s.Calls++
}
type DefaultSleeper struct{}
func (d *DefaultSleeper) Sleep() {
time.Sleep(1 * time.Second)
}
const finalWord = "Go!"
const countdownStart = 3
func Countdown(out io.Writer, sleeper Sleeper) {
for i := countdownStart; i > 0; i-- {
fmt.Fprintln(out, i)
sleeper.Sleep()
}
fmt.Fprint(out, finalWord)
}
func main() {
sleeper := &DefaultSleeper{}
Countdown(os.Stdout, sleeper)
}