← Go parçacıkları

HTTP sunucusunu düzgün kapatmak

SIGINT veya SIGTERM geldiğinde yeni bağlantı almayı bırakıp açık istekleri bitiren Go sunucusu.

Go#go

package main
import (
"context"
"errors"
"log"
"net/http"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()
srv := &http.Server{Addr: ":8080", Handler: http.DefaultServeMux}
go func() {
if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatal(err)
}
}()
<-ctx.Done()
shutdownCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := srv.Shutdown(shutdownCtx); err != nil {
log.Printf("kapatma hatası: %v", err)
}
}

Klavye kısayolları

Arama ve komutlar
K
Ara
/
Ana sayfa
gh
Yazılar
gy
Notlar
gn
Kod parçacıkları
gk
Arşiv
ga
Projeler
gp
Sonraki yazı
j
Önceki yazı
k
Temayı değiştir
t
Bu listeyi göster
?