// +build ignore package main import ( "context" "io" "log" "net/http" "github.com/neonxp/rutina" ) func main() { // New instance with builtin context r := rutina.New(rutina.Opt.SetListenOsSignals(true)) 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 }, rutina.RunOpt.SetOnDone(rutina.Shutdown)) // Gracefully stopping server when context canceled r.Go(func(ctx context.Context) error { <-ctx.Done() log.Println("Stopping server...") return srv.Shutdown(ctx) }, nil) if err := r.Wait(); err != nil { log.Fatal(err) } log.Println("All routines successfully stopped") }