Go 从Revel框架中的模块继承控制器
我正在尝试从我的应用程序中的一个模块使用共享控制器,但我真的不知道如何做到这一点。以下是我想做的:Go 从Revel框架中的模块继承控制器,go,controller,revel,Go,Controller,Revel,我正在尝试从我的应用程序中的一个模块使用共享控制器,但我真的不知道如何做到这一点。以下是我想做的: 我有两个revel应用程序,一个前端和后端应用程序。前端应用程序用于显示面向用户的站点,后端应用程序用于管理人员 我创建了一个特殊的控制器来连接数据库 我希望前端和后端应用程序使用相同的控制器,以尽量减少冗余 从示例中可以看出,当您想要一个控制器数据库时,它大致可以转换为: type DBController { *revel.Controller } type App { D
type DBController {
*revel.Controller
}
type App {
DBController
}
当我只想拥有一个应用程序时,这一点很有效,但当我想将控制器共享到另一个应用程序时,我无法将DBController
导入该应用程序
我尝试过的事情
我尝试将DBController
移动到它自己的包中,然后导入该包并直接从中继承:
// in db.go
package controllers
// import and stuffs
type DBController {
*revel.Controller
}
// in app.go
package controllers
import (
dbc "site.com/modules/controllers"
)
type App struct {
dbc.DBController
// *dbc.DBController
}
这给了我一个紧急错误,说明找不到路由:
panic: Route validation error (in /app/path/routes:7):
revel/controller: failed to find controller App
在带指针和不带指针的继承中
我也尝试过Revel,代码相同,但目录不同,并通过配置导入:
// app.conf
modules.dbcontroller=site.com/modules/dbcontroller
然后在app.go
:
type App struct {
DBController
}
但它仍然没有像以前一样的错误。我非常确信正确的方法是使用模块,因为文档中说(我的重点是):
模块是可以插入应用程序的软件包它们允许在多个Revel应用程序之间或从第三方来源共享控制器、视图、资产和其他代码
模块的布局应与Revel应用程序的布局相同。“托管”应用程序将按如下方式将其合并:
import dbc "site.com/modules/dbcontroller"
type App struct {
dbc.DBController
}
因此
DBController
可以与几个revel应用程序一起使用?非常感谢。我不是权威,但我会发表一些意见,这些意见可能会有所帮助,尽管我没有完整的答案
关于你的问题,我首先想到的是“继承”一词的用法——Go不支持继承。它确实支持嵌入。我可能会将问题主题写为“在Revel框架中重用模块中的控制器”
其次,我想知道您是在两个独立的Revel应用程序之间重用Revel模块,还是在一个Revel应用程序的两个独立部分中重用模块中的代码,而该部分恰好有前端和后端。快速阅读reveal框架使我认为模块是为前者而设计的,而不是为他是后者
第三,我想知道你是否把文件和包混淆了。在学习Go时,我不太清楚一个包可以跨越多个文件“存在于db.go和app.go等两个文件中,它们仍然在同一个包中。@bertzziz,您找到解决方案了吗?”?我也在试着做同样的事情。