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或修复程序状态的正确性。
- 使用Docker获取包超时 – “golang.org/x/net/context/ctxhttp”
- Golang:托pipe的VM应用程序的预览返回错误
- 重新构build在Docker容器中运行的Go(App Engine)应用程序?
- Docker的默认包含哪些内容?
- 用docker构buildpkg_config_path错误
- Docker应用程序容器不会与我的MySQL容器通信
- 如何构buildmoby的ARM v7 Dockerfile?
- Docker返回“json:can not unmarshal string into Go value of type string”
- Docker与golang-onbuild构成无法在代理之后下载