go 退出但是端口依然被占用的原因
package main
import (
setting "bitian_go/pkg"
"bitian_go/routers"
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
//var EsClient *elastic.Client
func init() {
setting.Setup()
setting.NewMysqlClient()
setting.InitRedis()
//EsClient = setting.NewEsClient()
}
func main() {
r := routers.Router()
srv := &http.Server{
Addr: ":8000",
Handler: r,
ReadTimeout: 30 * time.Second,
WriteTimeout: 30 * time.Second,
MaxHeaderBytes: 1 << 20,
}
go func() {
// 服务连接
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
// 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt, syscall.SIGQUIT, syscall.SIGHUP)
<-quit
log.Println("Shutdown Server ...")
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal("Server Shutdown:", err)
}
log.Println("Server exiting")
}
现在通过hup 命令可以关闭go 程序,但是接口依然被占用,所以想知道问题在哪里。
推荐文章: