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