9.11 优雅的停止http服务


package main

import (
	"context"
	"fmt"
	"log"
	"net/http"
	"os"
	"os/signal"
	"time"
)

func main() {

	mux := http.NewServeMux()
	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		time.Sleep(10 * time.Second)
		fmt.Fprintln(w, "Hello world!")
	})

	srv := &http.Server{Addr: ":8080", Handler: mux}
	go func() {
		if err := srv.ListenAndServe(); err != nil {
			log.Printf("Server error: %s
", err)
		}
	}()

	log.Println("Server listening on : " + srv.Addr)

	stopChan := make(chan os.Signal)
	signal.Notify(stopChan, os.Interrupt)

	<-stopChan // wait for SIGINT
	log.Println("Shutting down server...")

	ctx, cancel := context.WithTimeout(
		context.Background(),
		30*time.Second)
	srv.Shutdown(ctx)
	cancel()
	log.Println("Server gracefully stopped")
}

/*
2018/03/27 00:18:10 Server listening on : :8080
2018/03/27 00:19:56 Shutting down server...
2018/03/27 00:19:56 Server error: http: Server closed
2018/03/27 00:20:04 Server gracefully stopped
*/
原文地址:https://www.cnblogs.com/zrdpy/p/8655004.html