Golang의 인터페이스에서 필드 값을 가져 오려고합니다. 인터페이스는 처음에는 데이터베이스 결과에서 값을 가져 오는 빈 인터페이스입니다. DB 쿼리가 정상적으로 작동합니다.Golang에서 선언 구조가없는 인터페이스에서 인터페이스 필드 값 가져 오기
내가 필요한 유일한 것은 인터페이스의 필드 값을 가져와야한다는 것입니다. t가 인터페이스를 갖는 다음과 같은 값입니다
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
fmt.Println(s.Index(i))
}
: 다음은 내 코드입니다
map[id:null count:1]
단순히 1
처럼 "count"
의 값을 원하는 내 문제는 그 지수() 메서드는 구조체가 필요하기 때문에 공황 상태를 반환하고 여기에는 구조체가 없습니다. 그렇다면 인터페이스 값을 얻으려면 어떻게해야합니까? Golang의 리플렉션 패키지를 사용하거나 사용하지 않고 필드 값을 얻기 위해 인터페이스를 반복 할 수있는 솔루션이 있습니까?
편집
카운트 값을 얻기 후에 나는 JSON을 구문 분석 할 필요가있다. 위의 코드는 API의 응답으로이 응답을 사용하여 JSON 형식으로 ratingCount
를 얻기 위해 사용되는
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,
})
}
:
여기 내 코드입니다. 이 코드에서는 GIN 프레임 워크를 사용하여 API에 HTTP 요청을합니다.
이제는 변수 ratingsCount
을 인쇄 할 때 터미널에 필요한 정확한 값을 표시하는 것이 문제입니다. JSON에서 계수의 실제 값을 얻을 수있는 방법은 무엇
{
"response": {
"code": 200,
"api_status": 1,
"message": "Success",
"total_record": {
"flag": 148
}
}
}
: 내가 JSON에 전달하고 때, 같은 변수 나 같은 응답을 준다?
"는 구조체가 필요하기 때문에 지수() 메소드는 공황을 반환"
나는 형의 주장을 사용하여이 예를 들어 작업 기록했다. 색인은 조각과 배열에서 작동합니다. 문제가 무엇인지 자세히 설명해 주시겠습니까? 예 :당신의't' 인터페이스는 JSON처럼 보이고 Go 인터페이스 타입처럼 보이지 않습니까? – Volker사실 json에 대한 인터페이스를 구문 분석하고있었습니다. 이제 인터페이스를 편집했습니다. Index()는지도를 가져 오기 때문에 당황합니다. 지도가 색인과 함께 작동하도록 정의되지 않았습니다. 권리 ? 난 그냥 인터페이스에서 "카운트"필드 값을 얻고 싶습니다. –
https://golang.org/pkg/reflect/#Value.MapIndex – Volker