我创建了一个API,并为JSON响应提供了两个不同的结构体;一个单记录,一个用于记录的集合:带结构的嵌入式类型和多态性
type Model struct {
Id uint
}
type Collection struct {
Records []Model
}
一个Model
仅仅是数据库中的数据的结构表示(比如,一个用户),和Collection
是模型的集合。
的问题是,会有不同的结构是嵌入Model
类型,就像这样:
type User struct {
*Model
Name string
}
而且因为User
不满足Model
类型,我不能将其追加到Collection
结构是这样的:
user := User{&Model{1}, "Jon"}
uc := &Collection{[]User{user}}
我怎样才能让记录结构接受实施Model
结构类型?
但在你的例子中,虽然我可以将BaseModel存储到记录中,但我怎样才能再次取回这些BaseModel?如果我得到的集合[0]是Model,而不是BaseModel,那么我如何访问Id字段? –
您使用类型断言检查记录类型,然后访问该字段。例如,'m:= Records [0]。(* User);的println(m.Id);'。 – nemo
问题是你需要知道在'Records'数组中插入的确切类型。如果你用'BaseModel'键入断言,但是存储的实际上是'User',断言失败。 'User'不是'BaseModel'。例如:https://play.golang.org/p/cnLnVpKTNk –