[toc]

是各种类型和函数的集合。在包中,如果标示符(类型名称,函数名称,方法名称)的首字母是大写,那这些标示符是可以被导出的,也就是说可以在包以外直接使用。

$GOPATH :环境变量(指向一个或多个目录),以及其子目录 src 目录的,当我们使用 import 关键字导入包的时候,Go 语言会在 $GOPATHGOROOT 目录中搜索包。

创建并使用自定义包

源文件
注意点:

  1. go文件名和文件夹名并没有关系,文件名可以是任意的,文件定义的package 才是标识
  2. 方法定义一定得是首字母大写
  3. 自定义包不能和导入处于同级目录,必须建一个文件夹存放自定义包

先看一下目录结构,以下示例是导入两包,一个是add,一个是simpleinterest

1
2
3
4
5
6
7
8
9
│  go.mod
│ main.go
│ README.md

├─add
│ add.go

└─simpleinterest
simpleinterest.go

步骤说明

1 创建package文件夹

1
2
3
mkdir package

go mod init packagetest

执行上述命令后,会生成 go.mod 文件,内容如下所示

1
2
3
module packageTest

go 1.20

2 创建各个文件

main.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main

import (
"fmt"
"log"
"packageTest/add" //导入 add 包 这个包必须放在$GOPATH下才可
"packageTest/simpleinterest"
)

var p, r, t = 5000.0, 10.0, 1.0

/*
* init function to check if p, r and t are greater than zero
*/
func init() {
println("Main package initialized")
if p < 0 {
log.Fatal("Principal is less than zero")
}
if r < 0 {
log.Fatal("Rate of interest is less than zero")
}
if t < 0 {
log.Fatal("Duration is less than zero")
}
}

func main() {
c := add.Add(1, 2) //调用 add 包中的 add 函数
si := simpleinterest.Calculate(p, r, t) // 调用 simpleinterest 包的 Calculate 函数
fmt.Println(c)
fmt.Println("Simple interest is", si)
}

simpleinterest/simpleinterest.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package simpleinterest

import "fmt"

/*
* init function added
*/
func init() {
fmt.Println("Simple interest package initialized")
}

//Calculate calculates and returns the simple interest for principal p, rate of interest r for time duration t years
func Calculate(p float64, r float64, t float64) float64 {
interest := p * (r / 100) * t
return interest
}

add/add.go

1
2
3
4
5
package add

func Add(a int, b int) (num int) {
return a + b
}

3 执行并调试

输出如下所示

1
2
3
4
Main package initialized
Simple interest package initialized
3
Simple interest is 500