Bagaimana untuk mengendalikan ralat HTTP di Golang?

WBOY
Lepaskan: 2024-06-03 10:15:57
asal
519 orang telah melayarinya

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

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

使用自定义错误类型

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

type MyError struct {
    code    int
    message string
}

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

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

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

    // ... 继续处理请求
}
Salin selepas log masuk

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

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
    }

    // ... 继续处理请求
}
Salin selepas log masuk
🎜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!

Label berkaitan:
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