Golang学习笔记(09-1-包的导入)

123 阅读2分钟

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