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