1. 包的引出

1)在实际的开发中,我们往往需要在不同的文件中,去调用其它文件的定义函数,比如man.go中,去使用utils.go文件中的函数,如何实现? => 包

2)现在又两个程序员共同开发一个Go项目,程序员xiaoming希望定义函数Cal,程序员xiaoqiang也想定义函数也叫Cal。两个程序员为此还吵了起来,怎么办? => 包

2. 包的原理图

包的本质实质上就是创建不同的文件夹,来存放程序文件。

画图说明一下包的原理

 3. 包的基本概念

 说明:go的每一个文件都是属于一个包的,也就是说go是以包的形式来管理文件和项目目录结构的

4. 包的三大作用

区分相同名字的函数、变量等标识符

当程序文件很多时,可以很好的管理项目

控制函数、变量等访问范围,即作用域

5. 包的相关说明

1)打包基本语法

package 包名

2)引入包的基本语法

import "包的路径"

6. 包使用的快速入门

说明:包快速入门-Go相互调用函数,我们将func Cal定义到utils.go,将utils.go放到一个包中,当其它文件需要使用到utils.go的方法时,可以import该包,就可以使用了【为演示:新建项目目录结构】

代码演示:

 utils.go文件

package utils
import (
	"fmt"
)
// 为了让其它包的文件使用Cal函数,需要将方法名首字母大写,如果是小写则意味着私有
func Cal(n1 float64, n2 float64,operator byte) float64 {
	var res float64
	switch operator {
		case '+':
			res = n1 + n2
		case '-':
			res = n1 - n2
		case '*':
			res = n1 * n2
		default:
			fmt.Println("操作符号错误")
	}
	return res
}

main.go文件

package main
import (
	"fmt"
	"go_code/project01/chapter06/funcdemo02_package/utils"
)
func main() {
	var n1 float64 = 3.3
	var n2 float64 = 2.2
	var operator byte = '-'
	result := utils.Cal(n1,n2,operator)
	fmt.Println("result=",result)
}

7. 包的注意事项和细节说明

1)在给一个文件打包时,该包对应一个文件夹,比如这里的utils文件夹对应的包名就是utils,文件的包名通常和文件所在的文件夹名一致,一般为小写字母。

2)当一个文件要使用其它包函数或变量时,需要引入对应的包

     <1>  引入方式1: import  "包名"

     <2>  引入方式2:

                import  (

                        "包名"

                        "包名"

                )

     <3>  package  指令在文件第一行,然后是import指令

     <4>  在import包时,路径从$GOPATH的src下开始,不用带src,编译器会自动从src下开始引入

3)为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似其它语言的public,这样才能跨包访问。

4)在访问其它包函数,变量时,其语法是  包名.函数名

5)如果包名较长,Go支持给包取别名,注意细节:取别名后,原来的包名就不能使用了

 说明:如果给包取了别名,则需要使用别名来访问该包的函数和变量

6)在同一包下,不能有相同的函数名(也不能有相同的全局变量名),否则报重复定义

7)如果你要编译成一个可执行程序文件,就需要将这个包声明为main,即package  main... 

这个就是一个语法规范,如果你是写一个库,包名可以自定义

 

当编译完了过后,会生成.a文件在pkg文件夹下,.a文件是库文件,里面是二进制的东西