Фреймворк Iris поддерживает грациозное завершение работы. В реальных бизнес-сценариях, когда мы хотим перезагрузить или закрыть веб-приложение, прямое принудительное завершение процесса Go может легко привести к тому, что некоторые бизнес-процессы будут завершены наполовину без завершения, вызывая исключения в бизнесе. Более правильным подходом является остановка приема новых запросов, позволение выполняющимся запросам завершить обработку, а затем выход из процесса Go.

Для выполнения грациозного завершения или перезапуска можно использовать несколько методов. Также можно использовать сторонние пакеты, специально созданные для этой цели, или можно использовать метод app.Shutdown(context.Context).

Зарегистрируйте событие CTRL/CMD+C с помощью iris.RegisterOnInterrupt:

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