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 ./...
暂无评论,快来抢沙发吧!