Slide 11
Slide 11 text
Goでのgracefulな起動・終了
gracefulな起動
ctx := context.Background()
ctx, stop := signal.NotifyContext(ctx, os.Interrupt) // SIGINTをtrapする
defer stop()
ctx, cancel := context.WithCancelCause(ctx)
// google.golang.org/grpc の例
srv2 := grpc.NewServer()
go func(ctx context.Context) { // 複數のserverを起動する爲にgo routineを分離する
listener, err := net.Listen("tcp", ":0")
if err != nil {
cancel(err) // 起動に失敗したらprocessを終了する
return
}
if err := srv2.Serve(listener); err != nil {
cancel(err) // 起動に失敗したらprocessを終了する
}
}(ctx)