【发布时间】:2019-11-09 16:34:12
【问题描述】:
我有一个 Go 包来管理配置。该包有一个在保存配置数据的init 函数中初始化的非导出变量。用户通过内部访问全局变量的导出函数与配置进行交互。像这样的
pakage config
var gConfig ...
func init() {
gConfig = ...
}
func Value(name string) (string, error) {
return gConfig.value(name)
}
我正在考虑使用插件并探索对我的配置包的影响。
如果插件导入 config 包并调用其导出的一些函数,将使用什么 gConfig 变量?插件是否有自己的内部配置实例,并在插件加载时初始化其自己的 gConfig 变量,或者插件在加载时动态链接以使用在程序启动时初始化的主程序 gConfig 变量?
【问题讨论】:
-
让配置包导出一个可以复制到插件的结构不是更明确吗?我认为你的问题的答案是他们都会访问同一个变量,但我认为如果是这样,那么这种设计有一定的魔力,很难解释未发起的(可能是未来的你)。它越明确,就越可维护。 FWIW