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フレームワークを使用してHTTPリクエストをAPIに送ります。
問題は、変数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