在不声明结构的情况下传递接口对象
Pass interface object without declaring a struct
如何在不声明结构的情况下传递 Interface{}
对象?
例如,当我使用 Revel 框架时,我想 return 在特定情况下出错。
以下示例不起作用,我尝试了各种约定都不起作用,正确的方法是什么?
return c.RenderJson(接口{"error":"xyz"})
如果我使用 Revel 框架构建服务器,return 客户端出错的正确方法是什么?
您不必事先声明命名的 struct
类型,您可以简单地使用:
return c.RenderJson(struct{ Error string }{"xyz"})
对于 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"`,
...
}
如何在不声明结构的情况下传递 Interface{}
对象?
例如,当我使用 Revel 框架时,我想 return 在特定情况下出错。
以下示例不起作用,我尝试了各种约定都不起作用,正确的方法是什么?
return c.RenderJson(接口{"error":"xyz"})
如果我使用 Revel 框架构建服务器,return 客户端出错的正确方法是什么?
您不必事先声明命名的 struct
类型,您可以简单地使用:
return c.RenderJson(struct{ Error string }{"xyz"})
对于 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"`,
...
}