Cara mematikan perkhidmatan Gin di Go dengan betul

PHPz
Lepaskan: 2023-04-11 10:22:41
asal
1467 orang telah melayarinya

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")
Salin selepas log masuk

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:

  1. Buat contoh http.Server dan tetapkan alamat pendengaran dan penghala Gin sebagai pemproses:
s := &http.Server{
    Addr:    ":8080",
    Handler: router,
}
Salin selepas log masuk
  1. Mulakan goroutine, panggil kaedah 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)
    }
}()
Salin selepas log masuk
  1. Apabila Apabila anda perlu mematikan perkhidmatan Gin, hubungi kaedah 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)
}
Salin selepas log masuk

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")
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!