github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/blogweb_gin/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"github.com/qiuhoude/go-web/blogweb_gin/database"
     6  	"github.com/qiuhoude/go-web/blogweb_gin/logs"
     7  	_ "github.com/qiuhoude/go-web/blogweb_gin/logs"
     8  	"github.com/qiuhoude/go-web/blogweb_gin/routers"
     9  	"log"
    10  	"net/http"
    11  	"os"
    12  	"os/signal"
    13  	"time"
    14  )
    15  
    16  func main() {
    17  	database.InitMsql()
    18  	router := routers.InitRouter()
    19  
    20  	//router.Run(":8000")
    21  	//log.Fatal(autotls.Run(router,"www.qiuhoude.com"))  //https
    22  
    23  	srv := &http.Server{
    24  		Addr:    ":8000",
    25  		Handler: router,
    26  	}
    27  
    28  	go func() {
    29  		// 开启监听服务
    30  		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
    31  			log.Fatalf("listen: %s\n", err)
    32  		}
    33  
    34  	}()
    35  
    36  	// 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
    37  	quit := make(chan os.Signal)
    38  	// 提示中断
    39  	signal.Notify(quit, os.Interrupt)
    40  	<-quit // 没有收到中断信号前,会阻塞在此处
    41  	logs.Error.Println("Shutdown Server ...")
    42  
    43  	// 超时的ctx ,超时会自己执行cancel
    44  	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    45  	defer cancel()
    46  
    47  	if err := srv.Shutdown(ctx); err != nil {
    48  		log.Fatal("Server Shutdown:", err)
    49  	}
    50  	logs.Error.Println("Server exiting")
    51  }