2015-03-02 103 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"})