Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Melaksanakan Pengendalian Ralat Berpusat dalam Rangka Kerja Gin?

Bagaimana untuk Melaksanakan Pengendalian Ralat Berpusat dalam Rangka Kerja Gin?

Linda Hamilton
Lepaskan: 2024-11-02 22:40:30
asal
777 orang telah melayarinya

How to Implement Centralized Error Handling in the Gin Framework?

Pengendalian Ralat yang Lebih Baik dalam Rangka Kerja Gin

Pengendalian Ralat Yang Dipertingkatkan dengan Penghala HTTP Tersuai dan Jenis Ralat

Dalam perbincangan baru-baru ini, satu teknik telah dicadangkan untuk tingkatkan pengendalian ralat dalam aplikasi HTTP Golang menggunakan penghala tersuai dan jenis ralat. Matlamatnya adalah untuk memusatkan pelaporan dan pengendalian ralat, menghapuskan keperluan untuk panggilan terus kepada c.JSON(500, err) dalam pengendali tertentu.

Melaksanakan Pengendalian Ralat Berpusat dalam Gin

Dalam Gin rangka kerja, ini boleh dicapai melalui penggunaan middleware dan kaedah gin.Context.Error(). Begini cara ia berfungsi:

  1. Buat Peranti Tengah Ralat: Tentukan perisian tengah tersuai yang melaksanakan antara muka gin.HandlerFunc. Perisian tengah ini akan berfungsi sebagai titik pusat untuk mengendalikan ralat.
<code class="go">type AppError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}

func JSONAppErrorReporter(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()

        errors := c.Errors.ByType(errType)

        if len(errors) > 0 {
            err := errors[0].Err
            var parsedError *AppError

            switch err.(type) {
            case *AppError:
                parsedError = err.(*AppError)
            default:
                parsedError = &AppError{
                    code: http.StatusInternalServerError,
                    message: "Internal Server Error",
                }
            }

            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>
Salin selepas log masuk
  1. Gunakan Perisian Tengah: Daftarkan perisian tengah pengendalian ralat dalam konfigurasi penghala anda.
<code class="go">router.Use(JSONAppErrorReporter(gin.ErrorTypeAny))</code>
Salin selepas log masuk
  1. Laporkan Ralat daripada Pengendali: Dalam pengendali laluan anda, bukannya mengendalikan ralat secara langsung, gunakan gin.Context.Error() untuk melampirkan maklumat ralat pada konteks permintaan .
<code class="go">func fetchSingleHostGroup(c *gin.Context) {
    hostgroupID := c.Param("id")

    hostGroupRes, err := getHostGroupResource(hostgroupID)

    if err != nil {
        c.Error(err)
        return
    }

    c.JSON(http.StatusOK, *hostGroupRes)
}</code>
Salin selepas log masuk
  1. Konfigurasi Pelayan: Dalam persediaan pelayan anda, konfigurasikan penghala dan jalankan pelayan.
<code class="go">router := gin.Default()
router.GET("/hostgroups/:id", fetchSingleHostGroup)
router.Run(":3000")</code>
Salin selepas log masuk

Sumber Pengendalian Ralat Tambahan

Untuk maklumat lanjut tentang pengendalian ralat dalam Gin, rujuk sumber ini:

  • [Isu Gin-gonic: Ralat pengendalian](https://github.com /gin-gonic/gin/issues/403)
  • [Isu gin-gonic: Kod status dalam pengendalian ralat](https://github.com/gin-gonic/gin/issues/264)
  • [Chirp](https://github.com/fengleng/chirp)
  • [Pengendali ralat Gin-merry](https://github.com/savsgio/gin-merry)
  • [Gin-frsh-showerrors](https://github.com/emicklei/go-frsh/tree/master/showerrors)

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengendalian Ralat Berpusat dalam Rangka Kerja Gin?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan