Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengendalikan ralat HTTP di Golang?

Bagaimana untuk mengendalikan ralat HTTP di Golang?

WBOY
WBOYasal
2024-06-03 10:15:57547semak imbas

Mengendalikan ralat HTTP di Golang adalah penting untuk bertindak balas dengan anggun kepada pelbagai keadaan ralat dalam permintaan pelanggan. Terdapat beberapa cara untuk mengendalikan ralat: Gunakan jenis ralat terbina dalam (contohnya: ErrBadRequest) untuk mewakili ralat HTTP biasa. Cipta jenis ralat tersuai untuk mengendalikan keadaan ralat tersuai. Gunakan fungsi httputil.NewError untuk mencipta ralat baharu berdasarkan kod status dan mesej.

如何在 Golang 中处理 HTTP 错误?

Bagaimana untuk mengendalikan ralat HTTP di Golang?

Mengendalikan ralat HTTP di Golang adalah sangat penting kerana ia membolehkan anda bertindak balas dengan anggun kepada pelbagai keadaan ralat dalam permintaan pelanggan. Golang menyediakan beberapa cara untuk mengendalikan ralat, termasuk pakej errors terbina dalam. errors 包。

使用内置错误类型

Golang 提供了几个内置的错误类型来表示常见的 HTTP 错误,例如:

import "net/http"

var (
    ErrBadRequest       = http.StatusBadRequest
    ErrUnauthorized     = http.StatusUnauthorized
    ErrForbidden        = http.StatusForbidden
    ErrNotFound         = http.StatusNotFound
    ErrMethodNotAllowed = http.StatusMethodNotAllowed
)

这些错误类型可以用来返回给客户端,表示特定的错误情况。

使用自定义错误类型

如果你需要处理自定义的错误情况,你可以创建自己的错误类型:

type MyError struct {
    code    int
    message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("code: %d, message: %s", e.code, e.message)
}

然后你可以在处理函数中返回这个自定义错误:

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    if err := validateRequest(r); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // ... 继续处理请求
}

使用 httputil.NewError

net/http/httputil 包提供了 NewError 函数,它可以根据给定的状态码和错误消息创建一个新的 error

Gunakan jenis ralat terbina dalam

Golang menyediakan beberapa jenis ralat terbina dalam untuk mewakili ralat HTTP biasa, seperti:

err := httputil.NewError(http.StatusBadRequest, "Bad Request")
Jenis ralat ini boleh digunakan untuk kembali kepada klien untuk mewakili keadaan ralat tertentu.

Gunakan jenis ralat tersuai

Jika anda perlu mengendalikan keadaan ralat tersuai, anda boleh mencipta jenis ralat anda sendiri:

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "GET":
        // ... 处理 GET 请求
    case "POST":
        // ... 处理 POST 请求
    default:
        http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
    }
}

Kemudian anda boleh mengembalikan ralat tersuai ini dalam fungsi pengendali: 🎜
type InvalidRequestError struct {
    message string
}

func (e InvalidRequestError) Error() string {
    return fmt.Sprintf("invalid request: %s", e.message)
}

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    if err := validateRequest(r); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // ... 继续处理请求
}
🎜Gunakan httputil. Pakej NewError🎜🎜net/http/httputil menyediakan fungsi NewError, yang boleh mencipta baharu berdasarkan kod status dan mesej ralat yang diberikan. kod>ralat: 🎜rrreee🎜Kes praktikal🎜🎜🎜Contoh 1: Menggunakan jenis ralat terbina dalam🎜🎜rrreee🎜🎜Contoh 2: Menggunakan jenis ralat tersuai🎜🎜rree

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan ralat HTTP di Golang?. 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