我想從Golang中的接口獲取字段值。該接口最初是一個空的接口,它從數據庫結果中獲取其值。數據庫查詢工作正常。從接口獲取接口字段值而無需在Golang聲明結構
我唯一需要的是我需要獲取接口的字段值。 這裏是我的代碼:
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
fmt.Println(s.Index(i))
}
其中T是一個接口有以下值:
map[id:null count:1]
我想要的"count"
值等簡單記1
我的問題是,該指數()方法返回一個恐慌,因爲它需要一個結構,我沒有任何結構在這裏。那麼我應該怎麼做才能獲得界面價值?是否有任何解決方案來迭代接口以獲取帶有或不帶有Golang反射包的字段值?
編輯
獲得價值數後,我需要把它解析爲JSON。
這裏是我的代碼:
type ResponseControllerList struct{
Code int `json:"code"`
ApiStatus int `json:"api_status"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
TotalRecord interface{} `json:"total_record,omitempty"`
}
response := ResponseControllerList{}
ratingsCount := reflect.ValueOf(ratingsCountInterface).MapIndex(reflect.ValueOf("count"))
fmt.Println(ratingsCount)
response = ResponseControllerList{
200,
1,
"success",
nil,
ratingsCount,
}
GetResponseList(c, response)
func GetResponseList(c *gin.Context, response ResponseControllerList) {
c.JSON(200, gin.H{
"response": response,
})
}
上面的代碼被用於獲取JSON格式的ratingCount
使用此響應,API響應。在這段代碼中,我使用GIN框架向API發出HTTP請求。
現在的問題是,當我打印變量ratingsCount
時,它在終端顯示我需要的計數的確切值。但是,當我將它傳遞給JSON,同一個變量給我喜歡的響應:
{
"response": {
"code": 200,
"api_status": 1,
"message": "Success",
"total_record": {
"flag": 148
}
}
}
什麼,就是以JSON伯爵的實際價值的方式?
「因爲它需要一個結構Index()方法返回一個恐慌」。索引適用於切片和數組。你能否更深入地解釋問題是什麼?例如。你的't'接口看起來像JSON,不像Go接口類型? – Volker
其實我是解析接口到json。現在我編輯了界面。 Index()因爲獲取地圖而驚慌失措。地圖未定義爲與索引一起使用。對 ?我只想從界面中獲得「計數」字段值。 –
https://golang.org/pkg/reflect/#Value.MapIndex – Volker