在 golang 框架中,通过继承 errors.error 接口创建自定义错误类型,使用 errors.new() 函数创建错误,并在处理程序函数中使用 http.error() 函数将自定义错误返回给调用方,从而实现自定义错误返回。包括:1. 创建自定义错误类型;2. 创建错误;3. 返回自定义错误。 内容来自samhan
内容来自zvvq
Golang 框架中自定义错误返回
在编写 Go 应用程序时,返回自定义错误非常重要,这有助于提供有意义和可操作的信息,从而便于调试和错误处理。本文将介绍如何使用标准库中的 errors 包在 Golang 框架中自定义错误返回。
创建自定义错误类型
首先,创建一个自定义错误类型,它通常继承自 errors.error 接口:
zvvq.cn
1
zvvq
2
3
zvvq好,好zvvq
4
zvvq.cn
5
内容来自zvvq,别采集哟
6
内容来自zvvq,别采集哟
7 内容来自samhan
8
9
package errors
type MyCustomError struct { 内容来自zvvq,别采集哟
message string 内容来自zvvq
} 本文来自zvvq
func (e MyCustomError) Error() string {
copyright zvvq
return e.message zvvq
} zvvq
创建错误 copyright zvvq
使用 New() 函数来创建一个新的自定义错误: 内容来自zvvq,别采集哟
1
zvvq.cn
err := errors.New("invalid input") 内容来自samhan666
传递一个字符串参数来设置错误消息。 内容来自zvvq,别采集哟
返回自定义错误 zvvq
然后,可以使用自定义错误类型从处理程序函数返回自定义错误: zvvq
1 内容来自zvvq
2 内容来自zvvq,别采集哟
3 内容来自zvvq
4 内容来自zvvq
5
copyright zvvq
6 内容来自zvvq,别采集哟
7 zvvq.cn
8
func handler(w http.ResponseWriter, r http.Request) { 本文来自zvvq
// 处理请求... 本文来自zvvq
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) zvvq好,好zvvq
return
zvvq.cn
}
} 内容来自samhan666
http.Error() 函数接受一个 error 参数,并将其写入响应作为错误消息。
zvvq好,好zvvq
实战案例
以下是一个处理 RESTful API 中用户更新请求的真实案例:
zvvq
1
2
3
4
5
6 内容来自samhan666
7
8 内容来自zvvq
9 内容来自zvvq
10
11 内容来自zvvq
12 内容来自zvvq,别采集哟
13 本文来自zvvq
14
15
16 内容来自samhan
17
内容来自samhan666
18 内容来自samhan666
19 内容来自zvvq
20
21 本文来自zvvq
22
内容来自samhan666
23 zvvq好,好zvvq
24 zvvq
25 copyright zvvq
26 copyright zvvq
27 zvvq.cn
28 zvvq.cn
29 内容来自zvvq,别采集哟
30
zvvq好,好zvvq
31
32 内容来自samhan666
33 本文来自zvvq
34
35 zvvq.cn
36 内容来自zvvq
37 zvvq
38 zvvq好,好zvvq
39 内容来自samhan666
40
zvvq好,好zvvq
41 内容来自samhan
42
43 本文来自zvvq
44
copyright zvvq
45
zvvq.cn
46 内容来自samhan
47
48 内容来自samhan
49 zvvq
50 zvvq
51
52 zvvq.cn
53
54 zvvq
55 内容来自samhan666
56 本文来自zvvq
57 内容来自zvvq,别采集哟
58
59
zvvq
60
内容来自zvvq,别采集哟
61
zvvq.cn
62
package handlers 本文来自zvvq
import (
zvvq好,好zvvq
"errors" 内容来自samhan
"fmt" zvvq
"net/http" 内容来自samhan666
"<a style=color:f60; text-decoration:underline; href="https://www.zvvq.cn/zt/15841.html" target="_blank">git</a>hub.com/gorilla/mux"
) copyright zvvq
type UpdateUserRequest struct { copyright zvvq
Name string `json:"name"` zvvq.cn
Age int `json:"age"` 内容来自samhan
} 内容来自zvvq
// UserService represents a service for handling user-related operations. zvvq.cn
type UserService interface {
UpdateUser(ctx context.Context, req UpdateUserRequest) error
}
type UserHandler struct {
copyright zvvq
userService UserService 内容来自samhan
} 内容来自zvvq,别采集哟
func NewUserHandler(userService UserService) UserHandler { zvvq.cn
return &UserHandler{userService: userService}
} zvvq
// UpdateUser handles a request to update a user. copyright zvvq
func (h UserHandler) UpdateUser(w http.ResponseWriter, r http.Request) { 内容来自samhan
// Parse and validate the request body.
本文来自zvvq
req := &UpdateUserRequest{} 内容来自zvvq,别采集哟
if err := json.NewDecoder(r.Body).Decode(req); err != nil {
本文来自zvvq
http.Error(w, "invalid request body", http.StatusBadRequest) 内容来自samhan666
return zvvq好,好zvvq
} zvvq
if req.Name == "" {
http.Error(w, "name is required", http.StatusBadRequest)
return
}
if req.Age < 0 {
内容来自zvvq,别采集哟
http.Error(w, "age must be a positive integer", http.StatusBadRequest)
return
内容来自samhan
} 内容来自samhan666
// Call the service to update the user. zvvq
if err := h.userService.UpdateUser(r.Context(), req); err != nil { 内容来自samhan666
switch err {
copyright zvvq
case errors.New("user not found"):
zvvq.cn
http.Error(w, "user not found", http.StatusNotFound) 内容来自zvvq,别采集哟
case errors.New("insufficient permissions"): 本文来自zvvq
http.Error(w, "insufficient permissions", http.StatusForbidden)
default:
zvvq好,好zvvq
http.Error(w, fmt.Sprintf("internal server error: %s", err), http.StatusInternalServerError)
} copyright zvvq
return 内容来自zvvq,别采集哟
} zvvq
w.WriteHeader(http.StatusNoContent) 内容来自zvvq
} 内容来自samhan
在这个例子中,UpdateUser() 处理程序函数通过将自定义错误返回给调用方来处理错误条件。具体来说,它返回以下错误:
本文来自zvvq
errors.New("user not found"):返回给 http.Error() 函数,并导致 404 状态代码。 errors.New("insufficient permissions"):返回给 http.Error() 函数,并导致 403 状态代码。 fmt.Sprintf("internal server error: %s", err):用于处理未预期的错误,并返回 500 状态代码。以上就是golang框架如何自定义错误返回?的详细内容,更多请关注其它相关文章! copyright zvvq