Go语言的源码服用建立在包(package)基础之上。Go语言的入口main()函数所在的包叫main,main包想要引用别的代码,必须同样以包的方式进行引用。
Go语言的包与文件夹一一对应,所有与包相关的操作,必须依赖于工作目录GOPATH。
1.GOPATH
(1)使用命令行查看GOPATH信息
zk@ubuntu:~/Go$ echo $GOPATH
zk@ubuntu:~/Go$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
(2)设置GOPATH
export GOPATH = `pwd`
2.package
包是多个Go源码的集合,是一种高级的代码复用方案。
包要求在同一个目录下的所有文件的第一行添加如下代码,以标记该文件归属的包:
package 包名
包的特性如下:
一个目录下的同级文件归属一个包
包名可以与其目录不同命
包名为main的包为应用程序的入口宝,编译源码没有main包时,将无法编译输出可执行的文件
3.导出包中标识符
在Go语言中,如果想在一个包里引用另外一个包里的标识符(如类型、变量或常量等)时,必须首先将被引用标识符导出,将要导出的标识符的首字母大写就可以让引用者可以访问这些标识符了。
4.import导入包
要引用其他包的标识符,可以使用import关键字,导入的包名需要使用双引号包围,包名是从GOPATH开始计算的路吉林,使用“/”进行路径分隔。
(1)两种导入方式
//单行导入
import "包1"
import "包2"
//多行导入
import (
"包1"
"包2"
)
(2)导入包后自定义引用的包名
customName "path/to/package"
其中path/to/package为要导入的包路径,customName为自定义的包名
(3)匿名导入包
如果只希望导入包,而不使用任何包内的结构和类型也不调用包内的任何函数,可以使用匿名导入包。格式如下:
import (
_ "path/to/package"
)
其中path/to/package表示要导入的包名,下划线 _ 表示匿名导入包。
匿名导入的包与其他方式导入的包一样会让导入包编译到可执行文件中,同时,导入包也会触发init()函数调用。
(4)init()函数
包在程序启动前的初始化入口:init()。init()函数的特性如下:
●每个源码可以1个init()函数
●init()函数会在程序执行前(main()函数执行前)被自动调用
●调用顺序为main()中引用的包,以深度优先顺序初始化
●同一个包中多个init()函数的调用顺序不可预期
●init()函数不能被其他函数调用