Golang 오류 처리 Dengan Framework Echo.

19432 단어 labstackechogoerrors
Jika kalian pernah menulis code dengan bahasa pemrograman golang, penulisan error handling akan sangat berbeda sekali dengan beberapa bahasa pemrograman populer yang lain, hal ini membuat sebagian 프로그래머 kebingungan memilih pendekatan untuk mengimplementasikan error handling yang tepat.

Disclaimer: artikel ini untuk kalian yang sudah pengalaman menggunakan golang pembahasan ini hanya untuk framework echo dan hanya sebagai referensi error handling. Bagi yang belum paham apa itu error handling silahkan belajar basic dahulu CMIIW :)




Framework Echo를 사용할 수 있습니까? Error Handling di echo? sebelum itu kita harus tahu dulu bahwa tipe data error pada golang bertipe interface, oleh karena itu kita bisa membuat juga custom implementasi dari tipe data error.

go.dev



package exceptions

type BadRequestErrorStruct struct {
    ErrorMsg string
}

func NewBadRequestError(msg string) *BadRequestErrorStruct {
    return &BadRequestErrorStruct{
        ErrorMsg: msg,
    }
}

func (e *BadRequestErrorStruct) Error() string {
    return e.ErrorMsg
}

NewBadRequestError() 오류가 발생하면 오류가 발생하지 않고 오류가 발생하지 않으며 오류가 발생할 수 있습니다.

Echo sebenarnya sudah membuat default Error Handling nya, akan tetapi kebutuhan pengguna itu berbeda-beda, maka dari itu kita di mudahkan untuk membuat error Handling secara Custom.





오류 처리 | Echo - 고성능의 미니멀한 Go 웹 프레임워크



Echo의 오류 처리 | Echo는 Go(Golang)를 위한 고성능의 확장 가능하고 미니멀한 웹 프레임워크입니다.



echo.labstack.com




echo.HTTPErrorHandling은 기본 Error Handling에서 에코를 처리하는 데 사용되며, 사용자 지정 키트를 사용할 때 오류가 발생할 수 있습니다.

package handler

import (
    "net/http"

    "github.com/labstack/echo/v4"
)


/*
    Fungsi untuk membuat custom error.
*/
func CustomErrorHandling(err error, c echo.Context) {
    if notFoundError(err, c) {
        return
    } else if badRequestError(err, c) {
        return
    } else if forbiddenError(err, c) {
        return
    } else {
        internalServerError(err, c)
        return
    }
}

13–24행, echo.HTTPErrorHandling과 같은 함수를 구현하면 2 입력 매개변수 오류와 echo.Context를 확인할 수 있습니다.

Error, digunakan untuk mengidentifikasi error apakah yang menimpa kodenya. nantinya akan di kembalikan menjadi response error yang sesuai.

echo.Context, digunakan untuk membuat response yang akan mengembalikan http response.



CustomErrorHandling, fungsi CustomErrorHandling, saya membuat pengecekan setiap error yang dihadapi, hal ini bertujuan untuk mengidentifikasi jenis error apa yang cocok untuk di kembalikan ke http response.

func internalServerError(err error, c echo.Context) bool {
    response, ok := err.(*exceptions.InternalServerErrorStruct)
    if ok {
        c.JSON(http.StatusInternalServerError, map[string]interface{}{
            "success": false,
            "message": response.Error(),
        })
        return true
    }
    return false
}

func badRequestError(err error, c echo.Context) bool {
    response, ok := err.(*exceptions.BadRequestErrorStruct)
    if ok {
        c.JSON(http.StatusBadRequest, map[string]interface{}{
            "success": false,
            "message": response.Error(),
        })
        return true
    }
    return false
}

func notFoundError(err error, c echo.Context) bool {
    response, ok := err.(*exceptions.NotFoundErrorStruct)
    if ok {
        c.JSON(http.StatusNotFound, map[string]interface{}{
            "success": false,
            "message": response.Error(),
        })
        return true
    }
    return false
}

func forbiddenError(err error, c echo.Context) bool {
    response, ok := err.(*exceptions.ForbiddenErrorStruct)
    if ok {
        c.JSON(http.StatusForbidden, map[string]interface{}{
            "success": false,
            "message": response.Error(),
        })
        return true
    }
    return false
}

곰팡이 유형은 CustomErrorHandling 곰팡이 유형에 따라 구현됩니다.

Setiap fungsi tersebut, akan melakukan type assertion , kita sudah tahu bahwa tipe data error merupakan sebuah interface, oleh karena itu perlu menegaskan implementasi yang mana cocok dengan error tersebut, ketika kondisi terpenuhi maka akan mengembalikan http response kepada user, terkait kondisi error apa yang di terima.

사용자 정의 오류 처리 및 오류 처리 방법은 다음과 같습니까?



서비스 dahulu를 참조하십시오.

func ErrorService(c echo.Context) error {
    /*
        Ambil query parameter dengan key "error"
    */
    errorParam := c.QueryParam("error")

    switch errorParam {
    case "internal server error":
        return exceptions.NewInternalServerError(errorParam)
    case "bad request":
        return exceptions.NewBadRequestError(errorParam)
    case "not found":
        return exceptions.NewNotFoundError(errorParam)
    case "forbidden":
        return exceptions.NewForbiddenError(errorParam)
    }

    return c.JSON(http.StatusOK, map[string]interface{}{
        "success": true,
        "message": "no error occured",
    })
}

simulasi service, saya hanya menggunakan queryParam, yang akan di lakukan pengecekan setiap apa pun nanti isi dari variabel errorParam, Nah, di dalam pengkondisian tersebut, memanggil fungsi custom yang mengimplemetasi interface error, dengan input sebuah parameter pesan error yang akan di kirim.

fungsi main.go에서 확인

func main() {
    /*
        Inisialisasi framework echo
    */
    e := echo.New()

    /*
        Timpa fungsi HTTPErrorHandler dari echo,
        menggunakan custom errorHandler buatan sendiri.
    */
    e.HTTPErrorHandler = handler.CustomErrorHandling

    /*
        Untuk mengabaikan ketika terjadi sebuah error.
    */
    e.Use(middleware.Recover())

    e.GET("/service", handler.ErrorService)

    err := e.Start(":8080")
    if err != nil {
        log.Fatal(err)
    }
}

Seperti biasa, fungsi main untuk inisialisasi frameworknya.

11행에서 echo.HTTPErrorHandler는 CustomErrorHandling에 대해 오류 처리 오류를 처리할 수 없습니다.

라인 28에서 미들웨어는 미들웨어를 사용하여 공황 상태에 빠지게 하고 서버 켐발리를 세게 합니다.

Untuk hasilnya kurang lebih nanti akan seperti ini.

다음과 같은 소스 코드가 있습니다.





Hirasaka Vizu / echo-error-handler · GitLab



GitLab.com



gitlab.com




케심풀란



Error Handling은 오류를 처리할 때 오류를 처리할 때 오류를 처리할 수 있는 방법을 제공합니다. Apakah mudah di baca atau tidak.


독서는 누군가의 경험 ~ 누군가로부터 지식을 얻는 속도를 높이는 한 가지 방법입니다.

좋은 웹페이지 즐겨찾기