我想使用自定义plugins/middleware动态创建HTTP路由器,目前我正在使用config.yml
,例如:
plugins:
- waf
- jwt
- cors
解析yml
文件后,我创建了这样的路由:
route := violetear.New()
chain := middleware.New()
for _, plugin := range Plugins {
chain := chain.Append(plugin)
}
router.Handle("/test", chain.Then(myHandler))
log.Fatal(http.ListenAndServe(":8080", router))
为了实现这一点,我必须在导入部分中包含所有插件,例如:
import (
"net/http"
"github.com/nbari/violetear"
"github.com/nbari/violetear/midleware"
// How to deal with this
"github.com/example/waf"
"github.com/example/jwt"
"github.com/example/cors"
)
我需要将当前的配置格式更改为更有用/通用的东西,例如:
plugins:
- [github.com/foo, foo]
- [github.com/bar, bar]
但除此之外,什么是动态"最好的方法。创建导入或生成以后可以编译的代码?
有什么想法吗?
答案 0 :(得分:1)
Go是一种静态链接语言。这意味着如果在编译时(从您的.go
源文件)未引用包,则该包将不会链接/编译到可执行二进制文件中,这意味着它在运行时将不可用。
所以最简单的就是使用导入。
如果您想要真正的动态配置,Go 1.8中引入的plugins可能是您的选择,但使用插件会使事情变得复杂,我只会将其用作最后的手段。另请注意,插件目前仅适用于Linux。
相关问题: