Kerangka kerja Iris mendukung penutupan yang mulus. Dalam skenario bisnis yang sebenarnya, ketika kita ingin me-restart atau menutup aplikasi web, memaksa proses Go untuk ditutup secara langsung dapat dengan mudah mengakibatkan beberapa proses bisnis terhenti di tengah jalan tanpa selesai, menyebabkan pengecualian bisnis. Pendekatan yang lebih baik adalah menghentikan penerimaan permintaan baru, membiarkan permintaan yang sedang berlangsung selesai diproses, dan kemudian keluar dari proses Go.

Anda dapat menggunakan beberapa metode untuk melakukan penutupan atau restart yang mulus. Anda juga dapat menggunakan paket pihak ketiga yang dibangun khusus untuk tujuan ini, atau Anda dapat menggunakan metode app.Shutdown(context.Context).

Daftarkan acara CTRL/CMD+C menggunakan iris.RegisterOnInterrupt:

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

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