Git Product home page Git Product logo

go-grace's Introduction

Go Grace

Go graceful process shutdown.

Install

go get github.com/deusexec/go-grace@latest

How To Use

package main

import (
    "fmt"
    "log"
    "net/http"
    "syscall"

    "github.com/deusexec/go-grace"
)

type Disposable interface {
    Dispose()
}

type DB struct{}
type Redis struct{}
type RabbitMQ struct{}

func (d *DB) Dispose() {
    fmt.Println("[*] Disposing: DB...")
}

func (d *Redis) Dispose() {
    fmt.Println("[*] Disposing: Redis...")
}

func (d *RabbitMQ) Dispose() {
    fmt.Println("[*] Disposing: RabbitMQ...")
}

func dispose(resources []Disposable) func() {
    return func() {
        fmt.Println("[*] Sever shutting down...")
        for _, resource := range resources {
            resource.Dispose()
        }
        fmt.Println("[*] Done")
    }
}

func main() {
    resources := []Disposable{
        new(DB),
        new(Redis),
        new(RabbitMQ),
    }

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Welcome"))
    })

    go func() {
        log.Println("Server is running...")
        if err := http.ListenAndServe("localhost:8080", nil); err != nil {
            log.Fatal(err)
        }
    }()

    grace.Shutdown(dispose(resources), syscall.SIGINT, syscall.SIGTERM)
}

Terminal 1

$ go run .
2025/01/01 15:25:00 Server is running...

Terminal 2

$ kill -s INT <PID>
[*] Sever shutting down...
[*] Disposing: DB...
[*] Disposing: Redis...
[*] Disposing: RabbitMQ...
[*] Done

go-grace's People

Contributors

deusexec avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.