1. 包的使用

Go语言中的包(package)就相当于是Python中的模块,在Go代码中,包是通过不同的文件夹来区分的,一个最内层的文件夹中所有 .go 文件代码属于一个包。

1.1. 声明包

  • 一个最内层文件夹属于一个包,其中的所有 .go 代码属于同一个包
  • 声明当前文件所属包,采用 package pkgname 语句,包名小写,一般与文件夹同名
  • 同一个包中,不能有重复的全局变量和函数、方法等
  • 可以被当前包之外的代码调用的函数或者方法,需要首字母大写

    1.2. 引用包

  • 引用内置包采用 import pkgname ,引用其它包需要写GOPATH/src之后的路径直到包所在文件夹

  • 包名太长的情况下,可使用别名替代。一旦使用别名,就不能再使用这个包的真实名称
  • 调用包中的函数或者变量的方法: pkgname.Func

    1.3. 案例

    1. # 文件目录结构
    2. [root@heyingsheng src]# tree cmdb/
    3. cmdb/
    4. ├── groups
    5. └── groups.go
    6. ├── main
    7. └── main.go
    8. └── monitor
    9. └── monitor.go
  1. package groups
  2. import "fmt"
  3. func Info() {
  4. fmt.Println("这是 groups 包中的info函数")
  5. }
  1. package monitor
  2. import "fmt"
  3. func Info() {
  4. fmt.Println("这是 monitor 包中的info函数")
  5. }
  1. package main
  2. import (
  3. group "cmdb/groups"
  4. "cmdb/monitor"
  5. "fmt"
  6. )
  7. func main() {
  8. fmt.Println("这是main包")
  9. monitor.Info()
  10. group.Info()
  11. }
  1. [root@heyingsheng src]# go run cmdb/main/main.go
  2. 这是main
  3. 这是 monitor 包中的info函数
  4. 这是 groups 包中的info函数

2. init函数

每一个 .go 文件(不是每个包)中可以指定一个 init 函数。在当前go文件中全局变量定义后,main函数执行前执行init函数,init函数的用途是初始化变量等一些基本操作。注意下面案例中,在引用其它包的情况下,不同包中全局变量和init函数的执行顺序。

  1. package groups
  2. import "fmt"
  3. var G0 = test()
  4. func test() string {
  5. fmt.Println("这是groups中全局变量初始化函数")
  6. return "groups-g0"
  7. }
  8. func init() {
  9. fmt.Println("这是groups中的init函数")
  10. //G0, G1 = "groups中G0", "groups中G1"
  11. }
  1. package main
  2. import (
  3. "cmdb/groups"
  4. "fmt"
  5. )
  6. var m0 = test()
  7. func test() string {
  8. fmt.Println("这是main中全局变量初始化函数")
  9. return "main"
  10. }
  11. func init() {
  12. fmt.Println("这是main中的init函数")
  13. }
  14. func main() {
  15. //fmt.Printf("G0=%s; G1=%s\n", groups.G0, groups.G1)
  16. fmt.Printf("这是main包中的main函数, G0=%s; m0=%s\n", groups.G0, m0)
  17. }
  1. [root@heyingsheng src]# go run cmdb/main/main.go
  2. 这是groups中全局变量初始化函数
  3. 这是groups中的init函数
  4. 这是main中全局变量初始化函数
  5. 这是main中的init函数
  6. 这是main包中的main函数, G0=groups-g0; m0=main