Go - how to organize code for dynamic packages -
i have small web application written in go. created base larger system , extendable components can added/removed without needing base modified in way.
the structure currently:
app modules core ... core files here ... app.go main.go app.go contain routing method should take web request , based on request path know module responsible handling request. each module/component having on controller.
each component have own package name think going impossible since go forces explicit import.
for example may add new module/component called blog such as:
app modules core ... core files here ... controller.go blog ... blog files here ... controller.go app.go main.go
there several ways achieve goal. since go not support dynamically loaded libraries @ moment, need recompile application whenever add/remove components. simplest way therefore yourapp/core package following:
- an
applicationtypeservehttpmethod acts main application - a
componentinterface components have implement. might want includebaseurl() string,servehttpmethod there. - a
registermethodapplicationtype, can used add new components app.
your components can implemented in separate packages (e.g. yourapp/blog) , depend on yourapp/core package.
the thing still needs "user-editable" main.go file, might this:
func main() { app := core.newapplication() app.register(blog.blog{ title: "my personal blog", }) app.register(...) app.run() } another approach might define rpc interface components (which might include functions registercomponent, unregistercomponent , getglobalconfig).
then, can run components in separate processes has advantage can start/stop/reload components dynamically , can not break main app. take @ net/rpc package , maybe httputil.newsinglehostreverseproxy if want use approach instead.
Comments
Post a Comment