内容简介:规则:
规则:
- 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 初始化流程理解(数据流建立)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
python学习手册(原书第5版)
马克·卢茨 / 机械工业出版社 / 2018-10 / 219
如果你想动手编写高效、高质量并且很容易与其他语言和工具集成的代码,本书将快速地帮助你利用Python提高效率。本书基于Python专家的流程培训课程编写,内容通俗易懂。本书包含很多注释的例子和插图,以帮助你开始使用Python2.7和3.3。每章都包含关于Python语言的重要组成部分的一节课。本书主要内容:了解Python的主要内置对象类型,如数字、列表和字典;创建和处理对象的Python语句,......一起来看看 《python学习手册(原书第5版)》 这本书的介绍吧!