gpt4 book ai didi

http - Golang根据struct字段设置http响应码

转载 作者:数据小太阳 更新时间:2023-10-29 03:16:54 29 4
gpt4 key购买 nike

在我正在编写的 api 中,我有一个错误结构,该结构编码为 json。当 api 出现错误时,它返回结构,我将 http 响应代码设置为适当的值。

type PodsError struct {
ErrorCode int `json:"error_code"`
CallingFunction string `json:"calling_function"`
Message string `json:"error_message"`
}

type PodsErrorWrapper struct {
Error PodsError `json:"error"`
}

现在每次我写结构时我也会写一个头文件,但我不喜欢我看到的重复代码的数量。

error := PodsError{http.StatusNotFound, "Calling Func", "Message"}
response.WriteHeader(error.ErrorCode)
response.WriteEntity(PodsErrorWrapper{error})

是否可以将 WriteHeader 调用移动到每当我将错误传递给 WriteEntity() 时调用的对象?我认为必须有一个我可以为 PodsErrorWapper 实现的函数,我可以在其中将 http 状态设置为 ErrorCode 字段的任何值。

编辑:抱歉我忘了说,我正在使用 go-restful 包 (github.com/emicklei/go-restful)

最佳答案

您可以创建自己的函数:

func writeEntity(r *restful.Response, value interface{}) error {
// if value is an error
if perr, ok := value.(PodsError); ok {
r.WriteHeader(perr.ErrorCode)
// reassign value so it gets wrapped: `{"error": value}`
value = struct {
Error PodsError `json:"error"`
}{perr}
}
return r.WriteEntity(value)
}

然后总是调用它而不是 response.WriteEntity:

writeEntity(response, PodsError{http.StatusNotFound, "Calling Func", "Message"})

关于http - Golang根据struct字段设置http响应码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993365/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com