docker的注册驱动程序在源代码中被初始化在哪里?

我试图了解Docker的源代码,同时学习Go。 Docker的一个让我困惑的区域是在75行的docker / daemon / graphdriver / driver.go中, strings映射的name属性被访问以获得types为InitFunc的函数。 但是,我似乎无法finddrivers的注册驱动器的初始化,似乎需要在某个地方完成。

init() 第62行 :

 func init() { drivers = make(map[string]InitFunc) } 

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

 func init() { graphdriver.Register("btrfs", Init) } 

//编辑

http://golang.org/doc/effective_go.html关于init()

每个源文件可以定义自己的niladic init函数来设置任何需要的状态。 (实际上每个文件都可以有多个初始化函数。)最后的意思是finally: 在包中的所有variables声明都评估了它们的初始值之后调用init ,并且只有在所有导入的包已经被初始化之后才会被初始化。

除了不能用声明表示的初始化之外,初始化函数的一个常见用途是在实际执行开始之前validation或修复程序状态的正确性。