O framework Iris suporta desligamento gracioso. Em cenários de negócios reais, quando queremos reiniciar ou fechar a aplicação web, forçar diretamente o processo Go a desligar pode facilmente levar a processos de negócios sendo terminados pela metade sem completar, causando exceções comerciais. A abordagem melhor é parar de aceitar novas solicitações, deixar as solicitações em andamento terminarem o processamento e então sair do processo Go.
É possível utilizar vários métodos para realizar desligamento ou reinício gracioso. Você também pode usar pacotes de terceiros especificamente construídos para esse propósito, ou pode usar o método app.Shutdown(context.Context).
Registre o 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()
// fechar todos os hosts.
app.Shutdown(ctx)
close(idleConnsClosed)
})
// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed