Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Pengendalian Ralat yang Lebih Baik dengan Gin?

Bagaimana untuk Melaksanakan Pengendalian Ralat yang Lebih Baik dengan Gin?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 12:06:31745semak imbas

How to Implement Better Error Handling with Gin?

Pengendalian Ralat yang Lebih Baik dengan Gin

Dalam artikel ini, kami akan meneroka cara melaksanakan pengendalian ralat yang lebih baik dengan Gin, diilhamkan oleh pendekatan digunakan dalam rangka kerja Go. Matlamat kami adalah untuk memusatkan pengendalian ralat, menjadikannya lebih mudah untuk mengurus dan mengurangkan kod pendua.

Jenis Ralat Tersuai

Serupa dengan appError tersuai taip dalam rangka kerja Go, mari tentukan jenis ralat tersuai untuk mengendalikan kod ralat dan mesej secara berstruktur:

<code class="go">type appError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}</code>

Perisian Tengah untuk Pelaporan Ralat

Untuk memusatkan pengendalian ralat, kita boleh mencipta perisian tengah yang akan mengendalikan respons ralat:

<code class="go">func JSONAppErrorReporter() gin.HandlerFunc {
    return jsonAppErrorReporterT(gin.ErrorTypeAny)
}

func jsonAppErrorReporterT(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        detectedErrors := c.Errors.ByType(errType)

        // Process errors and convert them to our custom error type
        if len(detectedErrors) > 0 {
            err := detectedErrors[0].Err
            parsedError := parseAPperror(err) 

            // Put error into response
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>

Dalam perisian tengah ini, ralat yang dikesan dihuraikan ke dalam jenis appError dan dikembalikan sebagai respons JSON.

Melaporkan Ralat dalam Pengendali

Untuk melaporkan ralat dalam fungsi pengendali, kami menggunakan gin.Context.Error():

<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>

Faedah

Pendekatan ini memberikan beberapa faedah:

  • Pengendalian ralat terpusat memudahkan pengurusan ralat.
  • Jenis ralat tersuai membolehkan pelaporan ralat berstruktur dan bermaklumat.
  • Perisian tengah memintas ralat, menghalangnya daripada merebak sepanjang kitaran permintaan.

Sumber Tambahan

Untuk mendapatkan maklumat yang lebih mendalam dan penyelesaian alternatif, rujuk kepada sumber berikut:

  • [Isu Gin: Mengendalikan Ralat](https://github.com/gin-gonic/gin/issues/214)
  • [Isu Gin: Kod Status dalam Pengendalian Ralat](https://github.com/gin-gonic/gin/issues/401)
  • [Gin-Merry: Pengendali Ralat](https://github.com/gin- contrib/gin-merry)
  • [Gin-Frsh-Showerrors](https://github.com/Double0h/gin-frsh-showerrors)

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengendalian Ralat yang Lebih Baik dengan Gin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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