golang 初始化顺序
夏至悲歌 · · 3547 次点击 · · 开始浏览1.import机制
●くろまる main -> import pkg1 -> const -> var ... -> init() -> main()
●くろまる pkg1 -> import pkg2 -> const -> ...
●くろまる pkg2 -> ...
import(
"time" //普通写法
. "fmt" //使用此包内的成员时不带fmt前缀
j "encoding/json" //json包重命名
// 引入包顺序遵循 标准库,项目包,第三方包
)
不要使用相对路径引入包(以GOPATH/src作为根目录)
import 后面跟着包路径。go语言的惯例只是一个特例,即恰好目录名与包名一致。import中的foo只是一个文件系统的路径。而下面foo.Foo()中的foo则是包名。而这个包是在src/foo目录下的源码中找到的。
2. init函数
init函数可以在任何包中有0个或1个或多个; init函数和main函数都不能被显示调用;
但这无论是对于可读性还是以后的可维护性来说,强烈建议用户在一个package中每个文件只写一个init函数。
3. 变量初始化顺序
全局变量初始化若有需要依赖其它变量,则被依赖的变量先初始化。但局部变量这样的话就会报错
var a int = b + 1
var b int = 1
下面例子会报 "initialization loop" 错误
var a = b
var b = c
var c = a
4. 类型检查
Go编译器可以从初始化表达式的右值推导出该变量应该声明为哪种类型,这让Go语言看起来有点像动态类型语言,但是Go语言实际上是强类型语言(静态类型语言)
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
1.import机制
●くろまる main -> import pkg1 -> const -> var ... -> init() -> main()
●くろまる pkg1 -> import pkg2 -> const -> ...
●くろまる pkg2 -> ...
import(
"time" //普通写法
. "fmt" //使用此包内的成员时不带fmt前缀
j "encoding/json" //json包重命名
// 引入包顺序遵循 标准库,项目包,第三方包
)
不要使用相对路径引入包(以GOPATH/src作为根目录)
import 后面跟着包路径。go语言的惯例只是一个特例,即恰好目录名与包名一致。import中的foo只是一个文件系统的路径。而下面foo.Foo()中的foo则是包名。而这个包是在src/foo目录下的源码中找到的。
2. init函数
init函数可以在任何包中有0个或1个或多个; init函数和main函数都不能被显示调用;
但这无论是对于可读性还是以后的可维护性来说,强烈建议用户在一个package中每个文件只写一个init函数。
3. 变量初始化顺序
全局变量初始化若有需要依赖其它变量,则被依赖的变量先初始化。但局部变量这样的话就会报错
var a int = b + 1
var b int = 1
下面例子会报 "initialization loop" 错误
var a = b
var b = c
var c = a
4. 类型检查
Go编译器可以从初始化表达式的右值推导出该变量应该声明为哪种类型,这让Go语言看起来有点像动态类型语言,但是Go语言实际上是强类型语言(静态类型语言)