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