您好我正在尝试为我正在构建的REST API构建基础框架。我喜欢有一个BaseController与常规CRUD操作。我想为每个控制器定义一个模型。我认为我的方法相当不错,唯一仍然似乎不起作用的是每个组件的初始化。我收到了这个错误:
too few values in struct initializer
和
cannot use Model literal (type Model) as type User in array element
我的方法:
type Model struct {
Id *bson.ObjectId
}
type Controller struct {
model *Model
arrayOfModels *[]Model
}
然后例如:
type User struct {
Model
someField string
}
type UserController struct {
Controller
}
func NewUserController() UserController {
return UserController{Controller{
model: &User{Model{Id: nil}},
arrayOfModels: &[]User{Model{Id: nil}},
}}
}
我将这个API与Mgo(MongoDB适配器)一起使用,因此我使用了bson.ObjectId
我想知道我做错了什么,如果我应该使用这种方法,那可能会更好。
非常感谢帮助。
Sjors
答案 0 :(得分:1)
我想知道我做错了什么
User
不是Model
,用于嵌入Model
。您无法使用User
类型的值,其中需要Model
。
Go中的多态性是通过接口完成的,而不是嵌入。
另外,你正在尝试继承; Go不支持继承 - 忘记继承。这也意味着忘记你所知道的MVC。
此外,您正在使用指向所有内容的指针。唐'吨;指针是昂贵的,因为如果它转义为一个简单的块作用域,则指向的值将在堆而不是堆栈上分配。在更复杂的情况下,更难以推理指针。
你需要一个范式转换,不要试图将你的" OO" -expertise应用到Go。而是阅读文档,阅读其他代码并学习如何在Go中思考。