46 lines
934 B
Go
Executable file
46 lines
934 B
Go
Executable file
// +build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"github.com/neonxp/rutina"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
func main() {
|
|
// New instance with builtin context. Alternative: r, ctx := rutina.OptionContext(ctx)
|
|
r, _ := rutina.New(rutina.WithStdLogger())
|
|
|
|
srv := &http.Server{Addr: ":8080"}
|
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
io.WriteString(w, "hello world\n")
|
|
})
|
|
|
|
// Starting http server and listen connections
|
|
r.Go(func(ctx context.Context) error {
|
|
if err := srv.ListenAndServe(); err != nil {
|
|
return err
|
|
}
|
|
log.Println("Server stopped")
|
|
return nil
|
|
})
|
|
|
|
// Gracefully stoping server when context canceled
|
|
r.Go(func(ctx context.Context) error {
|
|
<-ctx.Done()
|
|
log.Println("Stopping server...")
|
|
return srv.Shutdown(ctx)
|
|
})
|
|
|
|
// OS signals subscriber
|
|
r.ListenOsSignals()
|
|
|
|
if err := r.Wait(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Println("All routines successfully stopped")
|
|
}
|