如何在不声明结构的情况下传递Interface{}
对象? 例如,当我使用Revel框架时我想在特定情况下返回一个错误。传递接口对象而不声明结构
下面的例子不工作,我试过各种约定没有工作,什么是正确的方法?
回报c.RenderJson(接口{“错误”:“XYZ”})
请告诉我正确的方法,如果我建立一个服务器与狂欢框架错误返回到客户端?
如何在不声明结构的情况下传递Interface{}
对象? 例如,当我使用Revel框架时我想在特定情况下返回一个错误。传递接口对象而不声明结构
下面的例子不工作,我试过各种约定没有工作,什么是正确的方法?
回报c.RenderJson(接口{“错误”:“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"`,
...
}
你不必声明一个名为struct
类型之前,你可以简单地使用:
return c.RenderJson(struct{ Error string }{"xyz"})
这正是我一直在寻找,谢谢。你可以将我重定向到一个源代码,说明'json:“error_message”'在结构中的含义是什么?我是Golang的新手,所以这是我第一次看到它 – Dino 2015-03-02 20:33:26
看看这里:http://golang.org/pkg/encoding/json/#Marshal。它们被称为结构标签。这是如何通过反射使用它们的:http://golang.org/pkg/reflect/#StructTag。一般来说,这里有一些解释:https://golang.org/ref/spec#Struct_types – sberry 2015-03-02 20:59:13