2015-03-02 32 views
0

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

  1. 下面的例子不工作,我试过各种约定没有工作,什么是正确的方法?

    回报c.RenderJson(接口{“错误”:“XYZ”})

  2. 请告诉我正确的方法,如果我建立一个服务器与狂欢框架错误返回到客户端?

回答

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"`, 
    ... 
} 
+0

这正是我一直在寻找,谢谢。你可以将我重定向到一个源代码,说明'json:“error_message”'在结构中的含义是什么?我是Golang的新手,所以这是我第一次看到它 – Dino 2015-03-02 20:33:26

+0

看看这里: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

4

你不必声明一个名为struct类型之前,你可以简单地使用:

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