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 }