El framework Iris soporta el apagado gracioso. En escenarios de negocios reales, cuando queremos reiniciar o cerrar la aplicación web, forzar directamente el cierre del proceso de Go puede llevar fácilmente a que algunos procesos comerciales se terminen a la mitad sin completarse, causando excepciones comerciales. El enfoque mejor es dejar de aceptar nuevas solicitudes, permitir que las solicitudes en curso terminen su procesamiento y luego salir del proceso de Go.

Puedes utilizar varios métodos para realizar un apagado o reinicio gracioso. También puedes usar paquetes de terceros específicamente construidos con este propósito, o puedes usar el método app.Shutdown(context.Context).

Registra el evento CTRL/CMD+C usando iris.RegisterOnInterrupt:

idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
    timeout := 10 * time.Second
    ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
    defer cancel()
    // cerrar todos los hosts.
    app.Shutdown(ctx)
    close(idleConnsClosed)
})

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