Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
February 26, 2022 05:00 pm GMT

Golang HTTP Server Graceful Shutdown

Sunday Snippet #6 golang HTTP server graceful shutdown

package mainimport (    "context"    "errors"    "log"    "net/http"    "os"    "os/signal"    "syscall"    "time")func createChannel() (chan os.Signal, func()) {    stopCh := make(chan os.Signal, 1)    signal.Notify(stopCh, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)    return stopCh, func() {        close(stopCh)    }}func start(server *http.Server) {    log.Println("application started")    if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {        panic(err)    } else {        log.Println("application stopped gracefully")    }}func shutdown(ctx context.Context, server *http.Server) {    ctx, cancel := context.WithTimeout(ctx, 5*time.Second)    defer cancel()    if err := server.Shutdown(ctx); err != nil {        panic(err)    } else {        log.Println("application shutdowned")    }}func main() {    log.SetFlags(log.Lshortfile)    s := &http.Server{}    go start(s)    stopCh, closeCh := createChannel()    defer closeCh()    log.Println("notified:", <-stopCh)    shutdown(context.Background(), s)}

runtime:

$ go run main.gomain.go:24: application started^Cmain.go:50: notified: interrupt # ctrl+cmain.go:28: application stopped gracefullymain.go:39: application shutdowned$

Original Link: https://dev.to/clavinjune/golang-http-server-graceful-shutdown-4ke5

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To