Irisフレームワークは優雅なシャットダウンをサポートしています。実際のビジネスシナリオでは、Webアプリケーションを再起動または閉じる場合、Goプロセスを直接シャットダウンさせると、ビジネスプロセスが途中で中断され、ビジネス例外が発生する可能性があります。より良いアプローチは、新しいリクエストの受け入れを停止し、進行中のリクエストを処理してからGoプロセスを終了させることです。

優雅なシャットダウンまたは再起動を行うために、いくつかの方法があります。特にこの目的のために構築されたサードパーティのパッケージを使用することもできますし、app.Shutdown(context.Context)メソッドを使用することもできます。

iris.RegisterOnInterruptを使用してCTRL/CMD+Cイベントを登録します:

idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
    timeout := 10 * time.Second
    ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
    defer cancel()
    // すべてのホストを閉じる。
    app.Shutdown(ctx)
    close(idleConnsClosed)
})

// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed