goで定期的に関数を実行する
cronのように登録した時間や定期的に動作させたい。
Code
1時間に1回、“ticker”が出力。Enterを入力すると終了。
package main
import (
"fmt"
"os"
"time"
)
func main() {
abort := make(chan struct{})
go func() {
os.Stdin.Read(make([]byte, 1))
abort <- struct{}{}
}()
ticker := time.NewTicker(1 * time.Hour)
for {
select {
case <-ticker.C:
fmt.Println("ticker")
case <-abort:
fmt.Println("Launch aborted!")
return
}
}
}
参考
プログラム言語Go: 本
難しい
ゴルーチンとチャンネルはきちんと使えるようになればかなり面白そうですが、全然理解が追いついていないのが現状。書いてるうちに理解できることを期待しつつ、ふわふわした感じでまずは使っていこうと思います。
これを使って以前に作ったAPIのチェックを定期的に走らせつつ、エラーがあったらSlackに通知して、dbにログを保存してそれをフロントで表示する!という漠然とした目標にむかって進みます。