当前位置: 首页 > news >正文

Go语言实战案例-实现简易定时提醒程序

在日常工作和学习中,我们常常需要一个小工具来提醒自己:比如休息眼睛、喝水、开会等。虽然很多软件有提醒功能,但用 Go 写一个轻量级的 命令行定时提醒程序,不仅简单实用,还能帮助我们熟悉 时间操作、并发、命令行交互 等关键知识点。

本文将实现一个简易定时提醒程序,支持以下功能:

  • • 指定提醒时间(如 10 秒后、30 分钟后)
  • • 提醒时在终端打印提示信息
  • • 支持多任务提醒

一、程序思路

  1. 1. 用户通过命令行传入提醒时间和内容,例如:
    remind -after=10s -msg="喝水提醒"
    remind -after=1m -msg="开会啦"
  2. 2. 程序解析参数,使用 time.After 或 time.NewTimer 实现延迟提醒。
  3. 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. 1. 10 秒提醒
    go run main.go -after=10s -msg="喝水提醒"
    输出:
    ⏳ 已设置提醒: 10s 后提醒 -> 喝水提醒
    🔔 提醒: 喝水提醒
  2. 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 实现多个提醒并发执行

这个简易定时提醒工具非常轻巧,适合平时用来做一些 番茄钟喝水提醒 或 会议提醒


文章转载自:

http://mutxKFZN.wmfmj.cn
http://1knkL7I3.wmfmj.cn
http://TJXEe61B.wmfmj.cn
http://fMMDJYeo.wmfmj.cn
http://54kkUe94.wmfmj.cn
http://1FK2g364.wmfmj.cn
http://CPddpNQB.wmfmj.cn
http://WinUhQ9B.wmfmj.cn
http://AM85PAyn.wmfmj.cn
http://PiRWtRxv.wmfmj.cn
http://Q8gpfhnV.wmfmj.cn
http://ltWeFomt.wmfmj.cn
http://L08j2Yqr.wmfmj.cn
http://85YiSeum.wmfmj.cn
http://qVNuw3rM.wmfmj.cn
http://BK0kZv1q.wmfmj.cn
http://FsCaLbtE.wmfmj.cn
http://0QRr9Pe4.wmfmj.cn
http://zcES1gxk.wmfmj.cn
http://uwO2GHGz.wmfmj.cn
http://HyycgTkT.wmfmj.cn
http://vKq3XMjr.wmfmj.cn
http://XvGcZS8a.wmfmj.cn
http://fp4mmeN5.wmfmj.cn
http://2J0HJL1c.wmfmj.cn
http://SFN5NMf2.wmfmj.cn
http://LEhrCzyU.wmfmj.cn
http://Qm8KoxGq.wmfmj.cn
http://EYRrmIac.wmfmj.cn
http://CHBjsBoY.wmfmj.cn
http://www.dtcms.com/a/371670.html

相关文章:

  • 如何在项目中使用 Claude 记忆库系统(二开场景指南)
  • Matlab Simulink中的一些记录
  • 在Word和WPS文字的表格中快速输入连续的星期、月、日
  • Linux 周期性用户作业计划:crontab
  • Flink TaskManager日志时间与实际时间有偏差
  • 综合案列(SQLpymysql)
  • 得物后端二面
  • v$lock TS lock id1 用于发现Oracle pdb不能关闭的sid
  • Lenovo联想YOGA Pro 16 IAH10 2025款笔记本电脑(83L0)开箱状态预装OEM原厂Win11系统
  • 硬件-电容学习DAY3——钽电容制造全解析:从粉末到精品的奥秘
  • word2vec模型案例
  • Python将md转html,转pdf
  • 虚拟机之CentOS、网络设置的有趣问题
  • Java全栈开发面试实录:从基础到高阶技术深度解析
  • Java捕获子线程异常以及主线程感知子线程异常
  • 设计模式:模板方法模式(Template Method Pattern)
  • BeautifulSoup4用法及示例
  • 宋红康 JVM 笔记 Day13|String Table
  • C/C++---变量对象的创建 栈与堆
  • 《AI大模型应知应会100篇》第69篇:大模型辅助的数据分析应用开发
  • 基于「YOLO目标检测 + 多模态AI分析」的PCB缺陷检测分析系统(vue+flask+数据集+模型训练)
  • SpringAMQP 的发布方确认
  • 2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
  • Selenium基本使用指南
  • Java核心概念精讲:JVM内存模型、Java类加载全过程与 JVM垃圾回收算法等(51-55)
  • 如何在Python中使用正则表达式?
  • Git Bash 中 Git 命令的实用主义指南
  • Vue → React/Next.js 思维对照表
  • 【Android】内外部存储的读写
  • [Android]RecycleView的item用法