Rumah >pembangunan bahagian belakang >Golang >Cara mematikan perkhidmatan Gin di Go dengan betul
Apabila membangun menggunakan Gin, rangka kerja pembangunan web bahasa Go, kadangkala perlu menutup perkhidmatan Gin secara manual untuk melepaskan sumber port atau melakukan operasi lain. Artikel ini akan menerangkan cara menutup perkhidmatan Gin dengan betul.
Kaedah permulaan lalai Gin
Apabila menggunakan Gin, kami biasanya menggunakan kod berikut untuk memulakan perkhidmatan http:
router := gin.Default() router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello, Gin!") }) router.Run(":8080")
Kod contoh ini memulakan Gin lalai Penghala, mengendalikan permintaan GET untuk laluan /
dan mengembalikan rentetan. Akhir sekali, kaedah Run
dipanggil untuk memulakan perkhidmatan Gin dan mendengar pada port 8080.
Perlu diambil perhatian bahawa kaedah Run
ialah panggilan menyekat yang sentiasa menduduki urutan utama supaya ia boleh memantau port secara berterusan dan memproses permintaan serta respons. Oleh itu, apabila kita perlu menutup perkhidmatan Gin secara manual, kita perlu menggunakan kaedah tanpa sekatan untuk memulakannya.
Gunakan http.Server
untuk memulakan Gin
Untuk mematikan perkhidmatan Gin secara manual, kita perlu menggunakan http.Server
terbina dalam Go, yang menyediakan kaedah Shutdown
yang boleh matikan perkhidmatan http dengan anggun.
Kita perlu mengikuti langkah berikut untuk memulakan Gin menggunakan http.Server
:
http.Server
dan tetapkan alamat pendengaran dan penghala Gin sebagai pemproses: s := &http.Server{ Addr: ":8080", Handler: router, }
http.Server
ListenAndServe
di dalamnya, dan mulakan perkhidmatan Gin secara tidak segerak: go func() { if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }()
http.Server
Shutdown
untuk memastikan perkhidmatan boleh ditutup dengan baik: if err := s.Shutdown(context.Background()); err != nil { log.Fatal("Server forced to shutdown:", err) }
Contoh kod penuh:
package main import ( "context" "log" "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello, Gin!") }) s := &http.Server{ Addr: ":8080", Handler: router, } go func() { if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }() // 假设需要在 5 秒后关闭服务 <-time.After(5 * time.Second) if err := s.Shutdown(context.Background()); err != nil { log.Fatal("Server forced to shutdown:", err) } log.Println("Server shutdown gracefully") }
Di atas Selepas kod menghantar penghala Gin sebagai pengendali kepada http.Server
, ia memulakan perkhidmatan Gin menggunakan kaedah ListenAndServe
. Kemudian, jalankan perkhidmatan http secara asynchronous dalam goroutine untuk memastikan bahawa utas utama tidak disekat. Akhir sekali, tunggu selama 5 saat dalam urutan utama sebelum memanggil kaedah Shutdown
, matikan perkhidmatan Gin dengan anggun, dan cetak log.
Ringkasan
Artikel ini memperkenalkan cara menutup perkhidmatan Gin dengan betul Menggunakan http.Server
terbina dalam Go, anda boleh mematikan perkhidmatan http dengan baik dan mengelakkan masalah seperti kebocoran sumber yang. mungkin disebabkan oleh gangguan perkhidmatan secara tiba-tiba.
Sudah tentu, kod di atas hanyalah kod sampel dan tidak disyorkan untuk digunakan secara langsung dalam persekitaran pengeluaran. Apabila merujuk kepada kod, ia perlu diubah suai dan dioptimumkan dengan sewajarnya mengikut situasi dan keperluan sebenar.
Atas ialah kandungan terperinci Cara mematikan perkhidmatan Gin di Go dengan betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!