2 回答
![?](http://img1.sycdn.imooc.com/54584dc4000118d302200220-100-100.jpg)
TA贡献1868条经验 获得超4个赞
您可以将SourceDTO结构嵌入到另一个结构中,如下所示:
type SourceDTO struct { // top level object
Success bool `json:"success"`
}
type FeedResponse struct {
FeedData YourCustomFeedStruct `json:"feed"`
// Embedded Struct
SourceDTO
}
Success现在您可以从 FeedResponse 结构访问bool。SourceDTO此外,可以从 FeedResponse 访问该结构上定义的任何方法。
![?](http://img1.sycdn.imooc.com/533e4ce900010ae802000200-100-100.jpg)
TA贡献1887条经验 获得超5个赞
为了在 json 解组中有一些抽象,它可以用于interface{}许多用例。
package main
import (
"encoding/json"
"fmt"
)
type UniversalDTO struct {
Success bool `json:"success"`
Data interface{} `json:"data"`
}
type ConcreteData struct {
Source string `json:"source"`
Site string `json:"site"`
}
func main() {
jsondata := []byte(`{"sucess":"true","data":[{"source":"foo","site":"bar"}]}`)
data := make([]ConcreteData, 0, 10)
dtoToSend := UniversalDTO{Data: &data}
describe(dtoToSend)
describe(dtoToSend.Data)
json.Unmarshal(jsondata, &dtoToSend)
describe(dtoToSend)
describe(dtoToSend.Data)
}
func describe(i interface{}) {
fmt.Printf("(%v, %T)\n", i, i)
}
在这里测试: https: //play.golang.org/p/SSSp_zptMVN
json.Unmarshal需要一个将 json 放入其中的对象。因此,首先我们总是需要一个对象。根据目标对象的具体实例,可以使用具体的结构对象(当然必须单独创建)覆盖interface{} 。这里一个重要的学习是,go接口也可以用 slice 覆盖。通过这种方式,也可以将数组解组为 go 对象。但是,结构体的切片必须定义为指向该类型的指针的切片。
- 2 回答
- 0 关注
- 100 浏览
添加回答
举报