gpt4 book ai didi

go - 如何动态添加导入

转载 作者:IT王子 更新时间:2023-10-29 02:11:50 26 4
gpt4 key购买 nike

我想使用自定义动态创建一个 HTTP 路由器 plugins/middleware ,目前,我正在使用 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]

但除此之外,“动态”创建导入或生成稍后可以编译的代码的最佳方法是什么?

有什么想法吗?

最佳答案

Go 是一种静态链接语言。这意味着如果一个包在编译时没有被引用(从你的 .go 源文件),那个包将不会被链接/编译成可执行二进制文件,这意味着它在运行时将不可用。

所以最简单的就是只使用导入。

如果你想要真正的动态配置,plugins Go 1.8 中引入的插件可能是您的一个选择,但使用插件会使事情变得复杂,我只会将其用作最后的手段。另请注意,插件目前仅适用于 Linux。

相关问题:

Dynamic loading in Golang?

Go Plugin variable initialization

go 1.8 plugin use custom interface

关于go - 如何动态添加导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44243967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com