Go語言實現(xiàn)簡易命令行定時提醒程序的示例代碼
在日常工作和學習中,我們常常需要一個小工具來提醒自己:比如休息眼睛、喝水、開會等。雖然很多軟件有提醒功能,但用 Go 寫一個輕量級的 命令行定時提醒程序,不僅簡單實用,還能幫助我們熟悉 時間操作、并發(fā)、命令行交互 等關鍵知識點。
本文將實現(xiàn)一個簡易定時提醒程序,支持以下功能:
- 指定提醒時間(如 10 秒后、30 分鐘后)
- 提醒時在終端打印提示信息
- 支持多任務提醒
一、程序思路
用戶通過命令行傳入提醒時間和內(nèi)容,例如:
remind -after=10s -msg="喝水提醒"
remind -after=1m -msg="開會啦"
程序解析參數(shù),使用 time.After 或 time.NewTimer 實現(xiàn)延遲提醒。
到點后輸出提醒信息。
二、代碼實現(xiàn)
main.go:
package main
import (
"flag"
"fmt"
"time"
)
func main() {
// 定義命令行參數(shù)
after := flag.Duration("after", 10*time.Second, "提醒時間,例如 10s、1m、2h")
msg := flag.String("msg", "時間到啦!", "提醒內(nèi)容")
flag.Parse()
fmt.Printf("? 已設置提醒: %s 后提醒 -> %s\n", after.String(), *msg)
// 使用定時器
timer := time.NewTimer(*after)
// 等待定時觸發(fā)
<-timer.C
fmt.Printf("?? 提醒: %s\n", *msg)
}
三、運行測試
10 秒提醒
go run main.go -after=10s -msg="喝水提醒"
輸出:
? 已設置提醒: 10s 后提醒 -> 喝水提醒
?? 提醒: 喝水提醒
1 分鐘提醒
go run main.go -after=1m -msg="開會啦"
輸出:
? 已設置提醒: 1m0s 后提醒 -> 開會啦
?? 提醒: 開會啦
四、支持多任務提醒
如果我們想同時設置多個提醒,可以在 flag.Args() 獲取額外參數(shù),或者用一個簡單的 配置文件。這里用 goroutine 來并發(fā)執(zhí)行多個提醒。
示例(多個提醒同時執(zhí)行):
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包解析命令行參數(shù) - 使用
time.NewTimer/time.After實現(xiàn)延時提醒 - 使用 goroutine 實現(xiàn)多個提醒并發(fā)執(zhí)行
這個簡易定時提醒工具非常輕巧,適合平時用來做一些 番茄鐘、喝水提醒 或 會議提醒。
到此這篇關于Go語言實現(xiàn)簡易命令行定時提醒程序的示例代碼的文章就介紹到這了,更多相關Go定時提醒內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
go語言阻塞函數(shù)和非阻塞函數(shù)實現(xiàn)
本文主要介紹了go語言阻塞函數(shù)和非阻塞函數(shù)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03

