在我正在编写的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"`
}现在,每次我写struct的时候,我也会写一个头,但是我不喜欢我看到的重复代码的数量。
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)
发布于 2015-05-02 06:29:39
您可以创建自己的函数:
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"})https://stackoverflow.com/questions/29993365
复制相似问题