Golang自动包含可扩展应用程序



我对Go相当陌生,我很好奇是否有一个可扩展应用程序的既定设计模式。

例如,在我的源代码中,我有一个扩展目录,在那里我为我的程序放置不同的应用程序特定的扩展。我目前加载每个在我的主函数单独的名称。我想有程序自动包括我的扩展时,它被编译。

只是为了清楚,我不是试图在运行时动态加载扩展。我只是想使添加一个扩展程序一样简单,如:

  1. 将文件放入扩展名文件夹
  2. 编译

如果这在Go中是不可能的,那么我会做出应有的,但我只是在想必须有一个更好的方法来做到这一点。

为了更清楚地展示我想简化的内容,下面是我现在所做的一个示例:

main.go

package main
import (
    "github.com/go-martini/martini"
    "gopath/project/extensions"
)
func main() {
    app := martini.Classic()
    // Enable Each Extension
    app.Router.Group("/example", extensions.Example)
 // app.Router.Group("/example2", extensions.Example2)
 // ...

    app.Run()
}

扩展/example.go

package extensions
import (
    "github.com/codegangsta/martini-contrib/render"
    "github.com/go-martini/martini"
)
func Example(router martini.Router) {
    router.Get("", func(r render.Render) {
        // respond to query
        r.JSON(200, "")
    })
}

在每个扩展go文件中使用init方法注册扩展

plugin1.go中,你要写

func init() {
    App.Router.Group("/example", extensions.Example)
}

你需要让app公开

可以在主代码中使用注册函数。

我在rclone中使用了这种技术:下面是注册函数,下面是调用它的示例。每个模块通过将它们包含在主包

中来编译。

最新更新