文章目录

Go 工具:go fmt、go vet、go test 命令

发布于 2026-04-12 13:28:01 · 浏览 10 次 · 评论 0 条

Go 工具:go fmt、go vet、go test 命令


1. 使用 go fmt 统一代码风格

编写代码时,缩进、空格和换行的风格如果不统一,会让代码难以阅读。go fmt 命令是 Go 语言内置的代码格式化工具,它能自动将代码调整为 Go 官方推荐的标准格式。

打开终端,进入你的项目目录。

执行以下命令格式化当前目录下的所有 Go 文件:

go fmt ./...

上述命令中,./... 表示当前目录及其所有子目录。命令执行后,工具会自动重写所有被修改的文件。你不需要手动调整任何空格或括号,go fmt 会帮你处理一切。

如果你的代码已经是标准格式,终端将不会有任何输出。只有在文件被修改时,才会显示被修改的文件名。


2. 使用 go vet 捕捉潜在错误

代码格式正确不代表逻辑没有隐患。go vet 是一个静态分析工具,它不编译代码,而是像医生一样检查代码中常见的错误模式。例如,它会发现格式化字符串与参数不匹配、无法到达的代码或错误的锁拷贝。

确保终端仍然位于你的项目目录下。

运行以下命令对代码进行体检:

go vet ./...

如果代码存在问题,终端会显示具体的警告信息。例如,假设你写了一个错误的 Printf 调用:

package main

import "fmt"

func main() {
    var name = "Go"
    // 错误:使用了 %d 但传入的是字符串
    fmt.Printf("Name: %d", name)
}

运行 go vet 后,你会看到类似的输出:

./main.go:7:2: call to fmt.Printf format arg 1 has type string but want int

根据提示信息,修改代码中的错误,并重新运行 go vet 直到没有警告输出。


3. 使用 go test 进行单元测试

单元测试是保证代码质量的最后一道防线。go test 命令用于自动化运行测试代码,并生成测试报告。

3.1 编写测试文件

Go 语言的测试文件必须以 _test.go 结尾,并且测试函数必须以 Test 开头,且接受一个 *testing.T 类型的参数。

创建一个名为 math.go 的文件,并输入以下被测代码:

package math

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

创建一个名为 math_test.go 的文件,并输入以下测试代码:

package math

import "testing"

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

3.2 运行测试

保存上述两个文件后,在终端中执行

go test

如果测试通过,终端会显示

PASS
ok      your/package/path    0.002s

3.3 查看详细输出与覆盖率

为了更清晰地看到测试过程,添加 -v (verbose) 参数:

go test -v

终端会输出具体的测试函数名称和状态:

=== RUN   TestAdd
--- PASS: TestAdd (0.00s)
PASS
ok      your/package/path    0.002s

为了检查测试覆盖了多少代码,使用 -cover 参数:

go test -cover

终端会显示覆盖率百分比:

PASS
coverage: 100.0% of statements
ok      your/package/path    0.002s

以下是 go test 常用参数的对照表:

参数 全称 功能描述
-v verbose 显示所有测试的详细运行日志,包括每个测试的名称和状态。
-cover coverage 计算并显示代码覆盖率百分比,评估测试的充分程度。
-run - 指定要运行的特定测试函数,例如 -run TestAdd 仅运行该测试。
-race race detector 检测代码中的数据竞争问题,用于并发编程调试。

组合使用这些参数可以全方位把控代码质量。例如,运行以下命令可以同时开启详细输出和竞态检测:

go test -v -race ./...

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文