为了账号安全,请及时绑定邮箱和手机立即绑定

使用结构为控制器进行模型子类化

使用结构为控制器进行模型子类化

Go
斯蒂芬大帝 2021-08-10 15:39:10
我正在尝试为我正在构建的 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。您不能UserModel需要a 的地方使用类型的值。

Go 中的多态是通过接口完成的,而不是嵌入。

此外,您正在尝试进行继承;Go 不支持继承——忘记继承吧。这也意味着忘记你所知道的 MVC。

此外,您正在使用指向所有内容的指针。别; 指针代价高昂,因为如果它转义简单的块作用域,指向的值将分配在堆上而不是堆栈上。在更复杂的情况下也更难推理指针。

您需要进行范式转换,不要尝试将您的“面向对象”专业知识应用于 Go。而是阅读文档,阅读其他代码并学习如何在 Go 中思考。


查看完整回答
反对 回复 2021-08-10
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信