I am trying to get field values from an interface in Golang. The interface is initially an empty interface which is getting its values from a database result. The DB query is working fine.
The only thing I need is that I need to get the field value of the interface. Here is my code:
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
fmt.Println(s.Index(i))
}
where t is an interface having following values:
map[id:null count:1]
I want value of "count"
like simply 1.
My problem is that the Index() method is returning a panic because it needs a struct and I dont have any struct here. So what should I do to get interface value? Is there any solution to iterate over an interface to get field values with or without Golang's reflection package?
Edit
After getting the value for count I need to parse it to json.
Here is my code:
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,
})
}
The above code is being used to get the ratingCount
in JSON format to use this response as API response. In this code, I am using the GIN framework to make HTTP request to API.
Now the problem is that when I am printing the variable ratingsCount
, its displaying the exact value of count in terminal what I need. But when I am passing it to JSON, the same variable gives me the response like:
{
"response": {
"code": 200,
"api_status": 1,
"message": "Success",
"total_record": {
"flag": 148
}
}
}
What is the way to get the count's actual value in JSON ?