回顾:简单计时器
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 65 课,共 68 课。
挑战
简单创建一个倒计时应用,使用 time.NewTicker 从指定时长倒数到零,并定期显示进度消息。这个挑战将考查你结合计时器、循环和时长计算来创建实用计时应用的能力。
你会收到两个输入:
- 一个字符串,包含格式为
"value:unit"的倒计时时长(例如"10:Second"或"3:Minute") - 一个字符串,包含格式为
"value:unit"的更新间隔(例如"1:Second")
你的任务是:
- 通过按冒号拆分第一个输入,提取倒计时时长的值和单位
- 通过按冒号拆分第二个输入,提取更新间隔的值和单位
- 使用
strconv包将字符串值转换为整数 - 使用相应的常量,为倒计时时长和更新间隔创建
time.Duration对象:- 对于
"Second":乘以time.Second - 对于
"Minute":乘以time.Minute - 对于
"Hour":乘以time.Hour
- 对于
- 显示计时器标题:
"=== COUNTDOWN TIMER ===" - 显示计时器设置:
"Starting countdown from [countdown_duration_object]" - 显示更新频率:
"Updates every [update_interval_object]" - 使用更新间隔时长,通过
time.NewTicker创建一个计时器 - 使用倒计时时长初始化剩余时间变量
- 使用循环进行倒计时:
- 使用
<-ticker.C等待每次计时器事件 - 从剩余时间中减去更新间隔
- 如果剩余时间大于 0,显示:
"Time remaining: [remaining_time_object]" - 如果剩余时间小于或等于 0,显示:
"Time's up!"并退出循环
- 使用
- 使用
ticker.Stop()停止计时器 - 显示完成统计信息:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(计算剩余时间显示的次数)
- 显示完成消息:
"Countdown timer finished successfully"
使用 time 包进行计时器和时长操作,使用 strings 包拆分输入字符串,使用 strconv 包将字符串转换为整数,并使用 fmt 包输出。请记住,time.NewTicker 会返回一个计时器,它会定期通过自己的通道发送值;完成后,你必须调用 ticker.Stop() 来释放资源。这个挑战展示了如何使用 Go 的计时机制创建实用的倒计时器。
亲手试试
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// 读取输入
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// 解析倒计时时长输入
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// 解析更新间隔输入
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: 在下面编写你的代码
// 使用 switch 语句转换为 time.Duration 对象
// 创建倒计时器(测试时模拟运行,不实际等待)
// 实现倒计时循环
// 显示所有要求的消息和统计信息
// 注意:为了便于测试,模拟定时器的行为,不实际等待
}逻辑与流程中的所有课
自己练习: Go 在线编译器