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

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

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

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

一、程序思路

  1. 用户通过命令行传入提醒时间和内容,例如:

    bash 复制代码
    remind -after=10s -msg="喝水提醒"
    remind -after=1m -msg="开会啦"
  2. 程序解析参数,使用 time.Aftertime.NewTimer 实现延迟提醒。

  3. 到点后输出提醒信息。


二、代码实现

main.go

go 复制代码
package main

import (
	"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.C
	fmt.Printf("🔔 提醒: %s\n", *msg)
}

三、运行测试

  1. 10 秒提醒

    bash 复制代码
    go run main.go -after=10s -msg="喝水提醒"

    输出:

    rust 复制代码
    ⏳ 已设置提醒: 10s 后提醒 -> 喝水提醒
    🔔 提醒: 喝水提醒
  2. 1 分钟提醒

    bash 复制代码
    go run main.go -after=1m -msg="开会啦"

    输出:

    rust 复制代码
    ⏳ 已设置提醒: 1m0s 后提醒 -> 开会啦
    🔔 提醒: 开会啦

四、支持多任务提醒

如果我们想同时设置多个提醒,可以在 flag.Args() 获取额外参数,或者用一个简单的 配置文件 。这里用 goroutine 来并发执行多个提醒。

示例(多个提醒同时执行):

go 复制代码
package main

import (
	"fmt"
	"time"
)

type Reminder struct {
	After time.Duration
	Msg   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.C
			fmt.Printf("🔔 提醒: %s\n", r.Msg)
		}(r)
	}

	// 阻塞主程序,否则会直接退出
	select {}
}

运行后,程序会在 5s、10s、15s 分别提醒。


五、总结

通过这个案例,我们学习了:

  • 如何用 flag 包解析命令行参数
  • 使用 time.NewTimer / time.After 实现延时提醒
  • 使用 goroutine 实现多个提醒并发执行

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

相关推荐
Csvn20 小时前
📊 SQL 入门 Day 11:CASE 表达式:SQL 里的 if-else 魔法
后端·sql
QQ_216962909620 小时前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
寒水馨1 天前
Linux下载、安装protobuf-v35.1(附安装包protoc-35.1-linux-x86_64.zip)
linux·运维·服务器·google·序列化·protobuf·protoc
万少1 天前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
明月_清风1 天前
🚀 Palantir Foundry 本体论实战:当 Ontology 从"知识图谱"进化为"企业操作系统"
前端·后端
明月_清风1 天前
从概念到代码:用 Ontology 构建你的第一个知识图谱
前端·后端
Python私教1 天前
Django 6.1 邮件配置大改:旧项目如何平稳升级?
后端·python·django
Python私教1 天前
Django 6.1 升级避坑:数据库版本不兼容怎么解决?
后端·python·django
Python私教1 天前
Django 接口开发实测:新手还需要使用 REST 框架吗?
后端·python·django
techdashen1 天前
Go设计取舍之三: 0.3ns每次的错误Benchmark
开发语言·后端·golang