我正在尝试为我正在构建的 REST API 构建一个基本框架。我喜欢有一个带有常规 CRUD 操作的 BaseController。我想为每个控制器定义一个模型。我想我的方法已经很远了,唯一似乎仍然不起作用的是每个组件的初始化。我收到此错误: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我想知道我做错了什么,我是否应该使用这种方法以及什么可以更好。
1 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
我想知道我做错了什么
AUser
不是Model
用于嵌入 a Model
。您不能User
在Model
需要a 的地方使用类型的值。
Go 中的多态是通过接口完成的,而不是嵌入。
此外,您正在尝试进行继承;Go 不支持继承——忘记继承吧。这也意味着忘记你所知道的 MVC。
此外,您正在使用指向所有内容的指针。别; 指针代价高昂,因为如果它转义简单的块作用域,指向的值将分配在堆上而不是堆栈上。在更复杂的情况下也更难推理指针。
您需要进行范式转换,不要尝试将您的“面向对象”专业知识应用于 Go。而是阅读文档,阅读其他代码并学习如何在 Go 中思考。
- 1 回答
- 0 关注
- 171 浏览
添加回答
举报
0/150
提交
取消