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

我正在尝试为我正在构建的 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


我想知道我做错了什么,我是否应该使用这种方法以及什么可以更好。


斯蒂芬大帝
浏览 172回答 1
1回答

陪伴而非守候

我想知道我做错了什么AUser不是Model用于嵌入 a Model。您不能User在Model需要a 的地方使用类型的值。Go 中的多态是通过接口完成的,而不是嵌入。此外,您正在尝试进行继承;Go 不支持继承——忘记继承吧。这也意味着忘记你所知道的 MVC。此外,您正在使用指向所有内容的指针。别; 指针代价高昂,因为如果它转义简单的块作用域,指向的值将分配在堆上而不是堆栈上。在更复杂的情况下也更难推理指针。您需要进行范式转换,不要尝试将您的“面向对象”专业知识应用于 Go。而是阅读文档,阅读其他代码并学习如何在 Go 中思考。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go