Go docker';正在源代码中初始化的注册驱动程序?

Go docker';正在源代码中初始化的注册驱动程序?,go,docker,software-design,Go,Docker,Software Design,我试图理解Docker的源代码,同时也在学习Go。Docker的一个让我感到困惑的区域是第75行的内部,在那里访问strings映射的name属性以获得类型为InitFunc的函数。但是,我似乎找不到在哪里用注册的驱动器初始化驱动程序,似乎需要在某个地方进行初始化。在init()内部: 然后在依赖它的每个包中,它们调用graphdriver.Register,用于: //编辑 从aboutinit(): 每个源文件都可以定义自己要设置的niladic init函数 无论需要什么状态。(实际上每个

我试图理解Docker的源代码,同时也在学习Go。Docker的一个让我感到困惑的区域是第75行的内部,在那里访问
strings
映射的
name
属性以获得类型为
InitFunc
的函数。但是,我似乎找不到在哪里用注册的驱动器初始化
驱动程序,似乎需要在某个地方进行初始化。

init()内部

然后在依赖它的每个包中,它们调用
graphdriver.Register
,用于:

//编辑

从about
init()

每个源文件都可以定义自己要设置的niladic init函数 无论需要什么状态。(实际上每个文件可以有多个init finally是指finally:init在所有 包中的变量声明已对其 初始值设定项,只有在导入所有 包已初始化

除了不能表示为声明的初始化之外,还有 init函数的常见用途是验证或修复 实际执行开始前的程序状态


但地图在哪里设置了值?什么叫
init
?这是一个本地函数,我没有看到对它的任何调用。导入包时,Go会自动调用init,其他包会在自己的init函数中注册它们的处理程序。啊,好吧,这是我不理解的。只有
init
而不是
init
?是的,我强烈建议您在做任何其他事情之前先检查一遍,非常好的资源。
func init() {
    drivers = make(map[string]InitFunc)
}
func init() {
    graphdriver.Register("btrfs", Init)
}