52 lines
1,018 B
Go
52 lines
1,018 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
var start time.Time
|
|
var elapsed time.Duration
|
|
var running bool
|
|
|
|
go func() {
|
|
for {
|
|
time.Sleep(1 * time.Second)
|
|
if running {
|
|
elapsed = time.Since(start)
|
|
fmt.Printf("\rElapsed Time: %02d:%02d:%02d", int(elapsed.Hours()), int(elapsed.Minutes())%60, int(elapsed.Seconds())%60)
|
|
}
|
|
}
|
|
}()
|
|
|
|
for {
|
|
fmt.Println("> s: Start, p: Pause, r: Reset, q: Quit")
|
|
var input string
|
|
fmt.Scanln(&input)
|
|
|
|
switch input {
|
|
case "s":
|
|
if !running {
|
|
start = time.Now().Add(-elapsed)
|
|
running = true
|
|
fmt.Println("Stopwatch started.")
|
|
}
|
|
case "p":
|
|
if running {
|
|
running = false
|
|
fmt.Printf("\nPaused at: %02d:%02d:%02d\n", int(elapsed.Hours()), int(elapsed.Minutes())%60, int(elapsed.Seconds())%60)
|
|
}
|
|
case "r":
|
|
start = time.Time{}
|
|
elapsed = 0
|
|
running = false
|
|
fmt.Println("\nStopwatch reset.")
|
|
case "q":
|
|
fmt.Println("\nExiting")
|
|
return
|
|
default:
|
|
fmt.Println("\nInvalid input, please try again.")
|
|
}
|
|
}
|
|
}
|