shu
github.com/vardius/shutdown
go get github.com/vardius/shutdown
shu

github.com/vardius/shutdown

Simple go signals handler for performing graceful shutdown by executing callback function

by Rafał Lorenz

v1.0.2 (see all)License:MIT
go get github.com/vardius/shutdown
Readme

⏲️ shutdown

Build Status Go Report Card codecov license

logo

shutdown - Simple go signals handler for performing graceful shutdown by executing callback function

📖 ABOUT

Contributors:

Want to contribute ? Feel free to send pull requests!

Have problems, bugs, feature ideas? We are using the github issue tracker to manage them.

📚 Documentation

For examples visit godoc#pkg-examples

For GoDoc reference, visit pkg.go.dev

🚏 HOW TO USE

For detailed breakdown of example How to handle signals with Go to graceful shutdown HTTP server

🏫 Basic example

package main

import (
    "context"
    "fmt"
    "log"
    "net"
    "net/http"
    "os"
    "syscall"
    "time"

    "github.com/vardius/shutdown"
)

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()

    mux := http.NewServeMux()
    mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
        fmt.Fprintf(w, "Hello!")
    })

    httpServer := &http.Server{
        Addr:    ":8080",
        Handler: mux,
        BaseContext: func(_ net.Listener) context.Context { return ctx },
    }

    stop := func() {
        gracefulCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
        defer cancel()

        if err := httpServer.Shutdown(gracefulCtx); err != nil {
            log.Printf("shutdown error: %v\n", err)
        } else {
            log.Printf("gracefully stopped\n")
        }
    }

    // Run server
    go func() {
        if err := httpServer.ListenAndServe(); err != http.ErrServerClosed {
            log.Printf("HTTP server ListenAndServe: %v", err)
            os.Exit(1)
        }
    }()

    shutdown.GracefulStop(stop) // will block until shutdown signal is received
}

📜 License

This package is released under the MIT license. See the complete license in the package

GitHub Stars

11

LAST COMMIT

2yrs ago

MAINTAINERS

0

CONTRIBUTORS

1

OPEN ISSUES

0

OPEN PRs

0
VersionTagPublished
v1.0.3-0.20200622064330-08d1d90541ea
1yr ago
v1.0.2
2yrs ago
v1.0.1
2yrs ago
v1.0.0
3yrs ago
No alternatives found
No tutorials found
Add a tutorial