首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang设置基于struct字段的http响应码

Golang设置基于struct字段的http响应码
EN

Stack Overflow用户
提问于 2015-05-02 03:04:06
回答 1查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
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"`
}

现在,每次我写struct的时候,我也会写一个头,但是我不喜欢我看到的重复代码的数量。

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2015-05-02 06:29:39

您可以创建自己的函数:

代码语言:javascript
复制
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

代码语言:javascript
复制
writeEntity(response, PodsError{http.StatusNotFound, "Calling Func", "Message"})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29993365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档