Go 从Revel框架中的模块继承控制器

Go 从Revel框架中的模块继承控制器,go,controller,revel,Go,Controller,Revel,我正在尝试从我的应用程序中的一个模块使用共享控制器,但我真的不知道如何做到这一点。以下是我想做的: 我有两个revel应用程序,一个前端和后端应用程序。前端应用程序用于显示面向用户的站点,后端应用程序用于管理人员 我创建了一个特殊的控制器来连接数据库 我希望前端和后端应用程序使用相同的控制器,以尽量减少冗余 从示例中可以看出,当您想要一个控制器数据库时,它大致可以转换为: type DBController { *revel.Controller } type App { D

我正在尝试从我的应用程序中的一个模块使用共享控制器,但我真的不知道如何做到这一点。以下是我想做的:

  • 我有两个revel应用程序,一个前端和后端应用程序。前端应用程序用于显示面向用户的站点,后端应用程序用于管理人员
  • 我创建了一个特殊的控制器来连接数据库
  • 我希望前端和后端应用程序使用相同的控制器,以尽量减少冗余
  • 从示例中可以看出,当您想要一个控制器数据库时,它大致可以转换为:

    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应用程序的布局相同。“托管”应用程序将按如下方式将其合并:

  • 模块/应用程序/视图中的任何模板都将添加到模板加载程序搜索路径
  • 模块/app/controllers中的任何控制器都将被视为应用程序中的控制器
  • 等等

    但我不确定如何从这里共享和派生我的控制器

    TL;博士 如何在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,您找到解决方案了吗?”?我也在试着做同样的事情。