0

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

  1. 以下示例不起作用,我尝试了各种约定均无效,正确的方法是什么?

    返回 c.RenderJson(interface{"error":"xyz"})

  2. 如果我正在使用 Revel 框架构建服务器,那么向客户端返回错误的正确方法是什么?

4

2 回答 2

4

您不必struct事先声明命名类型,您可以简单地使用:

return c.RenderJson(struct{ Error string }{"xyz"})
于 2015-03-02T20:22:37.433 回答
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"`,
    ...
}
于 2015-03-02T20:22:48.700 回答