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语言实际上是强类型语言(静态类型语言)