3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果我理解正確,您想將數(shù)據(jù)解組為兩種類型的切片:
type A struct {
Foo string `json:"foo"`
ID string `json:"id"`
}
type B struct {
Bar string `json:"bar"`
Baz string `json:"baz"`
Eee string `json:"eee"`
}
來自SearchHit Source。
JSON 包可以為您完成大部分工作:
func executeQuery(q Query, v interface{}) error {
// Get a SearchHit. I am making this up.
// I have no idea how the package works.
searchHit, err := getHit(q)
if err != nil {
return err
}
// This is the important part. Convert the raw message to
// a slice of bytes and decode to the caller's slice.
return json.Unmarshal([]byte(*searchHit.Source), v)
}
您可以調(diào)用此函數(shù)以解碼為類型切片或指向類型的指針切片。
// Slice of type
var s1 []TypeA
if err := executeQuery(q1, &s1); err != nil {
// handle error
}
// Slice of pointer to type
var s2 []*TypeB
if err := error(q2, &s2); err != nil {
// handle error
}
我知道這不是問題的直接答案,但這就是通常處理這種情況的方式。

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
我不相信這很容易做到。在godocs的原始消息示例中,他們使用 json 中的一個(gè)值,在他們的示例中為“Space”,以確定要解組的結(jié)構(gòu)類型。
為此,該函數(shù)必須有某種方法來獲取為程序定義的每個(gè)結(jié)構(gòu)體,然后它必須檢查每個(gè) json 對(duì)象并使用反射將其與每個(gè)結(jié)構(gòu)體進(jìn)行比較以找出它的類型最有可能的是。如果有多個(gè)“可能”的結(jié)構(gòu)呢?然后沖突解決使事情復(fù)雜化。
簡(jiǎn)而言之,我不認(rèn)為你可以做到這一點(diǎn)。
- 3 回答
- 0 關(guān)注
- 327 瀏覽
添加回答
舉報(bào)