1. 包的使用
Go语言中的包(package)就相当于是Python中的模块,在Go代码中,包是通过不同的文件夹来区分的,一个最内层的文件夹中所有 .go 文件代码属于一个包。
1.1. 声明包
- 一个最内层文件夹属于一个包,其中的所有 .go 代码属于同一个包
- 声明当前文件所属包,采用
package pkgname
语句,包名小写,一般与文件夹同名 - 同一个包中,不能有重复的全局变量和函数、方法等
-
1.2. 引用包
引用内置包采用
import pkgname
,引用其它包需要写GOPATH/src之后的路径直到包所在文件夹- 包名太长的情况下,可使用别名替代。一旦使用别名,就不能再使用这个包的真实名称
- 调用包中的函数或者变量的方法:
pkgname.Func
1.3. 案例
# 文件目录结构
[root@heyingsheng src]# tree cmdb/
cmdb/
├── groups
│ └── groups.go
├── main
│ └── main.go
└── monitor
└── monitor.go
package groups
import "fmt"
func Info() {
fmt.Println("这是 groups 包中的info函数")
}
package monitor
import "fmt"
func Info() {
fmt.Println("这是 monitor 包中的info函数")
}
package main
import (
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 groups
import "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 main
import (
"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