除了使用标准库和第三方提供的包以外,有时还需要自己创建包,以提高程序代码的模块化程度和可复用性。
- 创建包目录。
项目自用的包,在项目目录下创建包目录,跨项目的公共包,在[GOPATH]/src下创建包目录。
- 设置包名称。
在组成包的每个源文件的最开始处用package语句指定包的名称,包名与包目录名最好一致。
- 导出标识符。
所有提供给包用户使用的类型、常量、变量、函数和方法,名称首字母必须大写,以示导出(即公有/可访问)。
- 运行包测试
在包内编写测试程序,命名为:[包名]_test.go
在包目录下执行启动测试命令:go test
// 自己创建的温度计算包
// temp.go
// Package temp includes some functions about temperature
package temp// C2F °C->°F
func C2F(c float64) float64 { // 函数名首字母大写,表示公有/可访问return c*9/5 + 32
}// F2C °F->°C
func F2C(f float64) float64 { // 函数名首字母大写,表示公有/可访问return (f - 32) * 5 / 9
}
// temp_test.go
// 测试自己创建的温度计算包temp中的函数
package temp
import "testing" // 标准库testing测试框架
type tempTest struct {i float64 // 待计算值expected float64 // 期望值
}
var C2FTests = []tempTest{{4.1, 39.38},{10, 50},{-10, 14},
}
var F2CTests = []tempTest{{32, 0},{50, 10},{5, -15},
}
func TestC2F(t *testing.T) { // 测试函数必须以Test开头for _, tt := range C2FTests {actual := C2F(tt.i)if actual != tt.expected {t.Errorf("expected %v, actual %v",tt.expected, actual)}}
}
func TestF2C(t *testing.T) {for _, tt := range F2CTests {actual := F2C(tt.i)if actual != tt.expected {t.Errorf("expected %v, actual %v",tt.expected, actual)}}
}
// 打印输出:
// PASS
// ok package/temp 0.391s