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: 本

time.Ticker で遊ぶ

難しい

ゴルーチンとチャンネルはきちんと使えるようになればかなり面白そうですが、全然理解が追いついていないのが現状。書いてるうちに理解できることを期待しつつ、ふわふわした感じでまずは使っていこうと思います。

これを使って以前に作ったAPIのチェックを定期的に走らせつつ、エラーがあったらSlackに通知して、dbにログを保存してそれをフロントで表示する!という漠然とした目標にむかって進みます。