Das Iris-Framework unterstützt einen graceful shutdown. In tatsächlichen Geschäftsszenarien kann das erzwingen des Go-Prozesses, um die Webanwendung neu zu starten oder zu schließen, leicht dazu führen, dass einige Geschäftsprozesse vor Abschluss abgebrochen werden, was zu Geschäftsausnahmen führen kann. Der bessere Ansatz ist, keine neuen Anfragen mehr anzunehmen, laufende Anfragen fertig zu verarbeiten und dann den Go-Prozess zu beenden.

Es stehen mehrere Methoden zur Verfügung, um einen graceful shutdown oder Neustart durchzuführen. Sie können auch speziell für diesen Zweck entwickelte Drittanbieterpakete verwenden oder die Methode app.Shutdown(context.Context) verwenden.

Registrieren Sie das CTRL/CMD+C-Ereignis mit iris.RegisterOnInterrupt:

idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
    timeout := 10 * time.Second
    ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
    defer cancel()
    // alle Hosts schließen.
    app.Shutdown(ctx)
    close(idleConnsClosed)
})

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