serverfx provides a simple configurable HTTP Server implementation with graceful shutdown.
go get -u github.com/liamclarkedev/serverfx
package foo
import (
"net/http"
"github.com/liamclarkedev/serverfx"
)
type Handler struct {}
func (h Handler) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {}
func main() {
server := serverfx.New(Handler{})
if err := server.Serve(); err != nil {
// handle error
}
}
package foo
import (
"net/http"
"time"
"github.com/liamclarkedev/serverfx"
)
type Handler struct{}
func (h Handler) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {}
func main() {
server := serverfx.New(
Handler{},
serverfx.WithAddress(":8080"),
serverfx.WithMaxHeaderBytes(1<<20),
serverfx.WithGracefulTimeout(10*time.Second),
)
if err := server.Serve(); err != nil {
// handle error
}
}
package foo
import (
"errors"
"net/http"
"time"
"github.com/liamclarkedev/serverfx"
)
type Handler struct{}
func (h Handler) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {}
func main() {
server := serverfx.New(
Handler{},
serverfx.WithAddress(":8080"),
serverfx.WithMaxHeaderBytes(1<<20),
serverfx.WithGracefulTimeout(10*time.Second),
)
// after 5 seconds manually shutdown the server.
go func() {
time.Sleep(5 * time.Second)
server.Shutdown()
}()
if err := server.Serve(); err != nil {
// The errors from Shutdown can be handled
// here once the Server has Shutdown.
if errors.Is(err, serverfx.ErrUnableToGracefulShutdown) {}
if errors.Is(err, serverfx.ErrUnableToListenAndServe) {}
}
}
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/liamclarkedev/serverfx"
)
func main() {
router := gin.New()
server := serverfx.New[*gin.Engine](router)
server.Handler.GET("/foo", func(ctx *gin.Context) {
ctx.JSON(http.StatusOK, nil)
})
if err := server.Serve(); err != nil {
// handle error
}
}
This project uses the MIT License.