Go語言實(shí)現(xiàn)簡(jiǎn)易命令行定時(shí)提醒程序的示例代碼
在日常工作和學(xué)習(xí)中,我們常常需要一個(gè)小工具來提醒自己:比如休息眼睛、喝水、開會(huì)等。雖然很多軟件有提醒功能,但用 Go 寫一個(gè)輕量級(jí)的 命令行定時(shí)提醒程序,不僅簡(jiǎn)單實(shí)用,還能幫助我們熟悉 時(shí)間操作、并發(fā)、命令行交互 等關(guān)鍵知識(shí)點(diǎn)。
本文將實(shí)現(xiàn)一個(gè)簡(jiǎn)易定時(shí)提醒程序,支持以下功能:
- 指定提醒時(shí)間(如 10 秒后、30 分鐘后)
- 提醒時(shí)在終端打印提示信息
- 支持多任務(wù)提醒
一、程序思路
用戶通過命令行傳入提醒時(shí)間和內(nèi)容,例如:
remind -after=10s -msg="喝水提醒"
remind -after=1m -msg="開會(huì)啦"
程序解析參數(shù),使用 time.After 或 time.NewTimer 實(shí)現(xiàn)延遲提醒。
到點(diǎn)后輸出提醒信息。
二、代碼實(shí)現(xiàn)
main.go:
package main
import (
"flag"
"fmt"
"time"
)
func main() {
// 定義命令行參數(shù)
after := flag.Duration("after", 10*time.Second, "提醒時(shí)間,例如 10s、1m、2h")
msg := flag.String("msg", "時(shí)間到啦!", "提醒內(nèi)容")
flag.Parse()
fmt.Printf("? 已設(shè)置提醒: %s 后提醒 -> %s\n", after.String(), *msg)
// 使用定時(shí)器
timer := time.NewTimer(*after)
// 等待定時(shí)觸發(fā)
<-timer.C
fmt.Printf("?? 提醒: %s\n", *msg)
}
三、運(yùn)行測(cè)試
10 秒提醒
go run main.go -after=10s -msg="喝水提醒"
輸出:
? 已設(shè)置提醒: 10s 后提醒 -> 喝水提醒
?? 提醒: 喝水提醒
1 分鐘提醒
go run main.go -after=1m -msg="開會(huì)啦"
輸出:
? 已設(shè)置提醒: 1m0s 后提醒 -> 開會(huì)啦
?? 提醒: 開會(huì)啦
四、支持多任務(wù)提醒
如果我們想同時(shí)設(shè)置多個(gè)提醒,可以在 flag.Args() 獲取額外參數(shù),或者用一個(gè)簡(jiǎn)單的 配置文件。這里用 goroutine 來并發(fā)執(zhí)行多個(gè)提醒。
示例(多個(gè)提醒同時(shí)執(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: "起身走動(dòng)一下"},
{After: 15 * time.Second, Msg: "開會(huì)啦"},
}
for _, r := range reminders {
go func(r Reminder) {
timer := time.NewTimer(r.After)
<-timer.C
fmt.Printf("?? 提醒: %s\n", r.Msg)
}(r)
}
// 阻塞主程序,否則會(huì)直接退出
select {}
}
運(yùn)行后,程序會(huì)在 5s、10s、15s 分別提醒。
五、總結(jié)
通過這個(gè)案例,我們學(xué)習(xí)了:
- 如何用
flag包解析命令行參數(shù) - 使用
time.NewTimer/time.After實(shí)現(xiàn)延時(shí)提醒 - 使用 goroutine 實(shí)現(xiàn)多個(gè)提醒并發(fā)執(zhí)行
這個(gè)簡(jiǎn)易定時(shí)提醒工具非常輕巧,適合平時(shí)用來做一些 番茄鐘、喝水提醒 或 會(huì)議提醒。
到此這篇關(guān)于Go語言實(shí)現(xiàn)簡(jiǎn)易命令行定時(shí)提醒程序的示例代碼的文章就介紹到這了,更多相關(guān)Go定時(shí)提醒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go語言使用pipe讀取子進(jìn)程標(biāo)準(zhǔn)輸出的方法
這篇文章主要介紹了go語言使用pipe讀取子進(jìn)程標(biāo)準(zhǔn)輸出的方法,實(shí)例分析了Go語言針對(duì)進(jìn)程操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
go語言阻塞函數(shù)和非阻塞函數(shù)實(shí)現(xiàn)
本文主要介紹了go語言阻塞函數(shù)和非阻塞函數(shù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
golang網(wǎng)絡(luò)通信超時(shí)設(shè)置方式
這篇文章主要介紹了golang網(wǎng)絡(luò)通信超時(shí)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言實(shí)現(xiàn)順序存儲(chǔ)的線性表實(shí)例
這篇文章主要介紹了Go語言實(shí)現(xiàn)順序存儲(chǔ)的線性表的方法,實(shí)例分析了Go語言實(shí)現(xiàn)線性表的定義、插入、刪除元素等的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03

