1. 包的使用
Go语言中的包(package)就相当于是Python中的模块,在Go代码中,包是通过不同的文件夹来区分的,一个最内层的文件夹中所有 .go 文件代码属于一个包。
1.1. 声明包
- 一个最内层文件夹属于一个包,其中的所有 .go 代码属于同一个包
- 声明当前文件所属包,采用
package pkgname语句,包名小写,一般与文件夹同名 - 同一个包中,不能有重复的全局变量和函数、方法等
-
1.2. 引用包
引用内置包采用
import pkgname,引用其它包需要写GOPATH/src之后的路径直到包所在文件夹- 包名太长的情况下,可使用别名替代。一旦使用别名,就不能再使用这个包的真实名称
- 调用包中的函数或者变量的方法:
pkgname.Func1.3. 案例
# 文件目录结构[root@heyingsheng src]# tree cmdb/cmdb/├── groups│ └── groups.go├── main│ └── main.go└── monitor└── monitor.go
package groupsimport "fmt"func Info() {fmt.Println("这是 groups 包中的info函数")}
package monitorimport "fmt"func Info() {fmt.Println("这是 monitor 包中的info函数")}
package mainimport (group "cmdb/groups""cmdb/monitor""fmt")func main() {fmt.Println("这是main包")monitor.Info()group.Info()}
[root@heyingsheng src]# go run cmdb/main/main.go这是main包这是 monitor 包中的info函数这是 groups 包中的info函数
2. init函数
每一个 .go 文件(不是每个包)中可以指定一个 init 函数。在当前go文件中全局变量定义后,main函数执行前执行init函数,init函数的用途是初始化变量等一些基本操作。注意下面案例中,在引用其它包的情况下,不同包中全局变量和init函数的执行顺序。
package groupsimport "fmt"var G0 = test()func test() string {fmt.Println("这是groups中全局变量初始化函数")return "groups-g0"}func init() {fmt.Println("这是groups中的init函数")//G0, G1 = "groups中G0", "groups中G1"}
package mainimport ("cmdb/groups""fmt")var m0 = test()func test() string {fmt.Println("这是main中全局变量初始化函数")return "main"}func init() {fmt.Println("这是main中的init函数")}func main() {//fmt.Printf("G0=%s; G1=%s\n", groups.G0, groups.G1)fmt.Printf("这是main包中的main函数, G0=%s; m0=%s\n", groups.G0, m0)}
[root@heyingsheng src]# go run cmdb/main/main.go这是groups中全局变量初始化函数这是groups中的init函数这是main中全局变量初始化函数这是main中的init函数这是main包中的main函数, G0=groups-g0; m0=main
