6.Go 代码包
代码包作用:
编译和归档Go程序的最基本单位
代码划分,集结和依赖的有效组织形式,也是权限控制的辅助手段
代码包的规则:
一个代码包实际上就是一个由导入路径代表的目录
导入路径即 <工作区目录>/src 或 <工作区目录>/pkg/<平台相关目录>之下的某段子目录
例如: 代码包 test.cn 可以对应于
/home/dao/golib/src/test.cn 目录 (/home/dao/golib 为工作区)
代码包声明:
每个源码文件必须声明其所属的代码包
同一个代码包中的所有源码文件声明的代码包应该是相同的
代码包声明于代码包导入路径的区别:
代码包声明语句中的包名称应该是该代码包的导入路径的最右子路径,例如:
test.cn/pkgtool
声明语句 : package pkgtool
代码包的导入:
代码包导入语句中使用的包名称应该与其导入路径一致,例如
fmt => import "fmt"
带别名的导入:
import 别名 "strings" // str.HasPrefix("abc", "c")
本地化的导入:
import . "strings" // 直接用 Has.Prefix("abc","c")
仅初始化的导入:
import _ "strings"
代码包的初始化(init 函数):
init 函数可以有多个。
init 函数执行时机:
1.单一代码包内:
先对所有全局变量进行求值,然后再执行所有 init 函数
注意: 同一代码包的多个 init 的执行顺序是不确定的
2.不同代码包之间
A包 导入 B包 , B包导入C包
那么 init 执行顺序为: C -> B -> A
注意:我们不应该对统一代码包中被导入的多个代码包的init函数的执行顺序做出假设
例如, A 导入 B,C // 不应该假设 B,C 哪个 init 先执行