传递接口对象而不声明结构

时间:2015-03-02 20:14:20

标签: go revel

如何在不声明Struct的情况下传递Interface{}对象? 例如,当我使用Revel框架时,我想在特定情况下返回错误。

  1. 以下示例无法正常工作,我尝试了各种约定没有效果,哪种方法正确?

    return c.RenderJson(interface {“error”:“xyz”})

  2. 如果我使用Revel框架构建服务器,有什么方法可以向客户端返回错误?

2 个答案:

答案 0 :(得分:4)

您之前不必声明名为struct的类型,您只需使用:

return c.RenderJson(struct{ Error string }{"xyz"})

答案 1 :(得分:4)

对于1.请尝试以下操作:

return c.RenderJson(map[string]string{"error": "xyz"})

RenderJson接受一个接口,这意味着你可以传递任何东西。您不需要显式转换为接口,但这可以像

那样完成
interface{}(map[string]string{"error": "xyz"})

对于2.我不确定,但我倾向于有一个辅助函数,它接受错误字符串(或错误类型)和状态代码并为我处理。

return HandleError(c, "xyz is not valid", 400)

然后HandleError只创建并写入错误。

如果你要处理一般的错误,我不知道为什么你不会犯错误类型,

type RequestError struct {
    Error string `json:"error_message"`,
    StatusCode int `json:"status_code"`,
    ...
}
相关问题