Go中的每一个文件都应该有自己的包,也就是说Go中以包的形式来管理文件和项目的目录结构的。Go中包的三大作用
- 区分相同名字的函数、变量等标识符
- 当程序文件很多时,可以很好的管理项目
- 控制函数、变量等访问范围,即作用域
1. 包的语法
1.1 打包语法
package 包名
2.1 引入包
import 包的路径
2. 包的使用案例
- 工具包文件
src/go-code/chapter-05/package-demo/utils/calculate.go
package utils
import (
"fmt"
)
// 实现加减乘除四则运算
func Cal(n1 float64, n2 float64, operator byte) float64 {
var result float64
switch operator {
case '+' :
result = n1 + n2
case '-' :
result = n1 - n2
case '*' :
result = n1 * n2
case '/' :
result = n1 / n2
default :
fmt.Println("输入有误 ...")
}
return result
}
- 入口文件
src/go-code/chapter-05/package-demo/main/main.go
package main
import (
"fmt"
"go-code/chapter-05/package-demo/utils"
)
func main() {
n1 := 10.0
n2 := 1.2
var operator byte = '-'
result := utils.Cal(n1, n2, operator)
fmt.Println("计算结果=", result)
}
2.1 使用细节
- 给一个文件打包时,跑名称就是文件夹的名称。比如
src/go-code/chapter-05/package-demo/utils/calculate.go
的包名就是utils
- 当在一个文件中要使用其它包中的函数和变量时,需要先引入对应的包
import "包名"
import (
"包名"
"包名"
)
- 引入包时,不用带
src
,编译器会自动从src
下开始引入 - 为了让其他包可以访问到本包的函数、变量,则该函数、变量首字母必须大写
- 引入包时,支持给包取别名;取别名后,原来的包名就不能使用
package main
import (
"fmt"
util "go-code/chapter-05/package-demo/utils"
)
- 同一个包下,不能有相同的函数名、全局变量名,否则编译报错
比如在 utils
包定义了 calculate.go
和 test.go
,在这两个文件中都定义了 func Cal()
方法,此时编译就会报错
2.2 项目目录结构
bin
是编译后生成的可执行文件,这里我们在编译的时候指定了文件目录和文件名称
# go-projects/src/book-mall 目录下执行该命令
go build -o bin/start main.go
# 如果是 windows 系统
go build -o bin/start.exe main.go