context.Background() // シグナル起点で Done()が呼ばれる ctxを生成 ctx, cancel := signal.NotifyContext( ctx, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGHUP, ) defer cancel() os/signal packageのNotifyContextでシグ ナル受信のタイミングでDone()される Contextを⽣成 もしシグナルごとにハンドリングを変えたい 場合はチャネルを作ってselectで待ち受けて 分岐する sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGHUP) select { case signal := <-sigChan: switch signal { case syscall.SIGINT, syscall.SIGQUIT: fmt.Println("SIGINT, SIGQUIT server shutdown") // something fmt.Println("SIGINT, SIGQUIT server shutdown") return case syscall.SIGTERM: fmt.Println("SIGTERM server shutdown") // something fmt.Println("SIGTERM server shutdown") default: panic("unexpected signal has been received") } default: }