我對Go很新,很好奇,如果有可擴展應用程序的既定設計模式。Golang自動 - 包括可擴展應用程序
例如,在我的源文件中,我有一個擴展目錄,我在其中爲我的程序放置了不同的應用程序特定擴展。我目前通過名稱逐個加載我的主函數。我希望程序在編譯時自動包含我的擴展。
只是要清楚,我不是試圖在運行時動態加載擴展。我只想讓添加的擴展程序一樣簡單:
- 刪除文件擴展文件夾
- 重新編譯
如果這僅僅是不可能去那麼我會讓因爲,但我只是想,必須有更好的方式來做到這一點。
爲了更清楚我想要什麼簡單顯示,這裏是我現在做的一個例子:
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, "")
})
}
將軟件包置於模塊路徑的子目錄下,並將子模塊導入到main。但是你需要爲所有'擴展名'添加一個標準包名稱並處理名稱衝突等等......一個噩夢:D – fabrizioM
另一種方法是使用像Packer一樣的RPC:http://www.packer.io/docs /extend/developing-plugins.html – elithrar