← Backend / Go / 基础专题

27_模块包与测试入门

把代码组织为包,编写最小单元测试并运行工具链。

Go 基础专题 27:模块、包与测试入门

学习目标:把代码组织为包,编写最小单元测试并运行工具链。

核心知识

同一目录下的普通 .go 文件通常属于同一个包;模块由 go.mod 定义导入路径。包名建议简短且表达职责,如 notes。其他包只能访问大写开头的标识符。go mod tidy 会整理依赖声明;添加依赖后要提交 go.mod 和 go.sum,以便重建环境。

下面是两个同目录文件的示例,先保存第一段为 math.go,第二段为 math_test.go:

package mathdemo

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

import "testing"

func TestAdd(t *testing.T) {
    if got := Add(2, 3); got != 5 {
        t.Fatalf("Add(2,3) = %d, want 5", got)
    }
}

运行 go test ./...。测试函数名以 Test 开头并接收 *testing.T;失败用 t.Error 或 t.Fatal 报告。测试应覆盖正常值、边界值和失败路径,而不仅仅重复函数里的表达式。需要多个输入时可用表驱动测试;涉及并发可再运行 go test -race ./...。

逐步理解

先确保 math.go 和 math_test.go 在同一目录、包名一致,再运行 go test ./...。测试只检查一个正常例子很容易漏掉边界;把输入、预期写成表,逐行运行可扩充覆盖。go.mod 记录模块身份和依赖关系,go.sum 记录模块校验信息;两者都属于可复现构建的一部分。

动手练习

练习:给 Add 增加负数和零的测试用例。答案要点:检查 Add(-2, 2)==0 与 Add(0, 0)==0。