Open linzhengen opened 3 years ago
package main import ( "context" "fmt" "os" "os/signal" "syscall" "time" ) func main() { // signal監視とContextは一行で完結 ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGINT, syscall.SIGTERM) // signalキャッチしたときに、ctx.Doneが実行される defer stop() workLoop(ctx) fmt.Println("graceful shuwdown") } func workLoop(ctx context.Context) { LOOP: for { select { case <-ctx.Done(): // ループ終了 break LOOP default: // ビジネスロジックはここ time.Sleep(time.Second * 10) } } }