在 Golang 中,包(package)用于对相关的代码进行分组和抽象,主要有以下作用:
- 避免命名冲突:不同包中的同名标识符(identifier)不会冲突,因为只有包的导入语句可以引入包的标识符。
- 提高代码的复用性:可以在多个包中重复使用包中的代码。
- 细化访问控制:可以在包中指定标识符的访问控制级别,如大写字符开头的是公开的(public),小写字符开头的是私有的(private)。
包的定义格式如下:
package 包名
每个 Golang 程序都在包内,如果没有指定包名,那么就属于默认包(default package)。程序入口的包名通常叫 main。
使用包的代码(包导入语句)格式如下:
import "包名"
例如,我们可以这样定义两个包:
包1: mathematics/add.go
package mathematics
func Add(x, y int) int {
return x + y
}
包2: main.go
package main
import "mathematics"
func main() {
sum := mathematics.Add(1, 2)
println(sum) // 3
}
main 包导入并调用了 mathematics 包,所以可以访问 mathematics 包中的 Add 函数。
一个比较完整的包例子如下:
// mathematics/arithmetic.go
package mathematics
func Add(x, y int) int {
return x + y
}
func Sub(x, y int) int {
return x - y
}
// mathematics/geometry.go
package mathematics
func Area(radius float64) float64 {
return 3.14 * radius * radius
}
// main.go
package main
import "mathematics"
func main() {
sum := mathematics.Add(1, 2)
area := mathematics.Area(10)
println(sum, area) // 3 314
}
所以总结来说,包的主要作用是:
- 区分标识符的作用域,避免命名冲突。
- 提高代码的复用性,同一个包中的代码可以在多个程序中使用。
- 细化访问控制,使用大写字母公开访问,小写字母私有访问。
- 方便编译和链接,每个包对应一个文件,这样可以高效编译和链接。
包的机制是 Golang 实现模块化、复用和管理程序依赖的重要手段。熟练使用包可以大大提高 Golang 程序的可维护性。