go
复制代码
package main
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
func IndexHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
return
}
_, _ = fmt.Fprintf(w, "测试", "")
}
func initRouters() {
http.HandleFunc("/", IndexHandler)
}
func main() {
initRouters()
srv := http.Server{
Addr: ":8081",
}
go func() {
err := srv.ListenAndServe()
if err != nil {
return
}
}()
// 优雅地关闭go服务
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit // 阻塞
// 定时关闭
ctx, cancle := context.WithTimeout(context.Background(), 2*time.Second)
defer cancle()
if err := srv.Shutdown(ctx); err != nil {
fmt.Println("Shutdown err:", err)
}
fmt.Println("Shutdown")
}