内容简介:规则:
规则:
- package 只会被初始化一次
- 同一个 package,不同文件是按照文件名的顺序来初始化
- 不能循环 import , 例如:A import B ,然后又 B import A
- 任何 package , 都可以存在一个以上的 init() , 执行顺序由上而下
- main() 只能存在于 package main
- 属于 package main 的文件 , 都将会初始化
案例1
sandbox.go
package main import "fmt" var _ int64 = s() func init() { fmt.Println("init in sandbox.go") } func s() int64 { fmt.Println("calling s() in sandbox.go") return 1 } func main() { fmt.Println("main") }
a.go
package main import "fmt" var _ int64 = a() func init() { fmt.Println("init in a.go") } func a() int64 { fmt.Println("calling a() in a.go") return 2 }
z.go
package main import "fmt" var _ int64 = z() func init() { fmt.Println("init in z.go") } func z() int64 { fmt.Println("calling z() in z.go") return 3 }
执行命令:
$ go run *.go
输出结果:
calling a() in a.go calling s() in sandbox.go calling z() in z.go init in a.go init in sandbox.go init in z.go main
案例2
sandbox.go
package main import "fmt" func init() { fmt.Println("init 1") } func init() { fmt.Println("init 2") } func main() { fmt.Println("main") }
utils.go
package main import "fmt" func init() { fmt.Println("init 3") }
执行命令:
$ go run *.go
输出结果:
init 1 init 2 init 3 main
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- SpringMVC初始化流程
- Spring Security 初始化流程详解
- Activiti6.0教程(2) - 初始化表, 部署流程, 启动流程, 创建的表介绍
- SpringBoot 启动分析(三) — Environment 的初始化流程
- 以太坊源码分析(三):以太坊服务的初始化流程
- 深度学习 Caffe 初始化流程理解(数据流建立)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rationality for Mortals
Gerd Gigerenzer / Oxford University Press, USA / 2008-05-02 / USD 65.00
Gerd Gigerenzer's influential work examines the rationality of individuals not from the perspective of logic or probability, but from the point of view of adaptation to the real world of human behavio......一起来看看 《Rationality for Mortals》 这本书的介绍吧!