如何在不聲明結構的情況下傳遞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