Go语言实战案例-实现简易定时提醒程序
在日常工作和学习中,我们常常需要一个小工具来提醒自己:比如休息眼睛、喝水、开会等。虽然很多软件有提醒功能,但用 Go 写一个轻量级的 命令行定时提醒程序,不仅简单实用,还能帮助我们熟悉 时间操作、并发、命令行交互 等关键知识点。
本文将实现一个简易定时提醒程序,支持以下功能:
- • 指定提醒时间(如 10 秒后、30 分钟后)
- • 提醒时在终端打印提示信息
- • 支持多任务提醒
一、程序思路
- 1. 用户通过命令行传入提醒时间和内容,例如:
remind -after=10s -msg="喝水提醒" remind -after=1m -msg="开会啦"
- 2. 程序解析参数,使用
time.After
或time.NewTimer
实现延迟提醒。 - 3. 到点后输出提醒信息。
二、代码实现
main.go
:
package mainimport ("flag""fmt""time"
)func main() {// 定义命令行参数after := flag.Duration("after", 10*time.Second, "提醒时间,例如 10s、1m、2h")msg := flag.String("msg", "时间到啦!", "提醒内容")flag.Parse()fmt.Printf("⏳ 已设置提醒: %s 后提醒 -> %s\n", after.String(), *msg)// 使用定时器timer := time.NewTimer(*after)// 等待定时触发<-timer.Cfmt.Printf("🔔 提醒: %s\n", *msg)
}
三、运行测试
- 1. 10 秒提醒
go run main.go -after=10s -msg="喝水提醒"
⏳ 已设置提醒: 10s 后提醒 -> 喝水提醒 🔔 提醒: 喝水提醒
- 2. 1 分钟提醒
go run main.go -after=1m -msg="开会啦"
⏳ 已设置提醒: 1m0s 后提醒 -> 开会啦 🔔 提醒: 开会啦
四、支持多任务提醒
如果我们想同时设置多个提醒,可以在 flag.Args()
获取额外参数,或者用一个简单的 配置文件。这里用 goroutine 来并发执行多个提醒。
示例(多个提醒同时执行):
package mainimport ("fmt""time"
)type Reminder struct {After time.DurationMsg string
}func main() {reminders := []Reminder{{After: 5 * time.Second, Msg: "喝水提醒"},{After: 10 * time.Second, Msg: "起身走动一下"},{After: 15 * time.Second, Msg: "开会啦"},}for _, r := range reminders {go func(r Reminder) {timer := time.NewTimer(r.After)<-timer.Cfmt.Printf("🔔 提醒: %s\n", r.Msg)}(r)}// 阻塞主程序,否则会直接退出select {}
}
运行后,程序会在 5s、10s、15s 分别提醒。
五、总结
通过这个案例,我们学习了:
- • 如何用
flag
包解析命令行参数 - • 使用
time.NewTimer
/time.After
实现延时提醒 - • 使用 goroutine 实现多个提醒并发执行
这个简易定时提醒工具非常轻巧,适合平时用来做一些 番茄钟、喝水提醒 或 会议提醒。