Hello 算法 Go 代码如何用 go test 运行算法练习并查看测试输出?
2026/9/9 16:19:48 网站建设 项目流程

Hello 算法 Go 代码如何用 go test 运行算法练习并查看测试输出?

【免费下载链接】hello-algo《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持简中、繁中、English、日本語,提供 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 等代码实现项目地址: https://gitcode.com/GitHub_Trending/he/hello-algo

在 Hello 算法仓库中,算法练习的 Go 实现集中在codes/go目录,每一章都是一个独立的 Go 包,算法源码(如quick_sort.go)与配套测试文件(如quick_sort_test.go)放在同一个目录下。这套测试文件遵循 Go 标准testing包的写法,因此不需要任何第三方测试框架,直接用 Go 工具链自带的go test命令就能运行,并通过标准输出查看排序结果等运行信息。本文说明如何装好 Go 环境、进入模块目录运行测试,以及如何读懂go test的输出。

准备条件:安装 Go 环境

按照仓库附录中的编程环境安装文档「Go 环境」一节操作:

  1. 下载并安装 Go 工具链(安装文档给出了官方下载地址);
  2. 在 VS Code 插件市场安装 Go 扩展;
  3. Ctrl + Shift + P呼出命令栏,执行Go: Install/Update Tools并全部勾选安装。

安装完成后,注意仓库对 Go 版本有明确声明。codes/go/go.mod 的内容为:

module github.com/krahets/hello-algo go 1.19

这说明整个 Go 代码目录是一个模块,名称为github.com/krahets/hello-algo,且声明要求 Go 1.19。你本机安装的 Go 版本需要满足这个要求,否则go test可能直接报错。

认识 codes/go 的目录结构与测试文件

codes/go下按章节划分包,例如chapter_sortingchapter_searchingchapter_dynamic_programming等,另有 pkg 目录存放ListNodeTreeNode等练习共用的数据结构定义。

以排序章节为例,quick_sort.go是算法源码,quick_sort_test.go 是对应的测试文件,包含三个测试函数:

  • TestQuickSort:运行基本版快速排序;
  • TestQuickSortMedian:运行中位基准数优化版;
  • TestQuickSortTailCall:运行递归深度优化版。

每个测试函数做的事很直接:构造一个待排序数组[]int{4, 1, 3, 1, 5, 2},调用quickSort(nums, 0, len(nums)-1),然后用fmt.Println打印排序完成后的数组,例如:

func TestQuickSort(t *testing.T) { q := quickSort{} nums := []int{4, 1, 3, 1, 5, 2} q.quickSort(nums, 0, len(nums)-1) fmt.Println("快速排序完成后 nums = ", nums) }

有一点需要事先了解:这些测试函数是「运行算法 + 打印结果」的写法,本身没有断言逻辑。因此go test显示通过,说明的是算法运行过程没有 panic 或编译错误,而排序结果是否正确,需要你自己看打印出来的数组来判断。

用 go test 运行算法练习测试

所有命令都在模块根目录codes/go下执行(必须先进入该目录,因为go test依据go.mod定位包):

运行某一章的全部测试:

cd codes/go go test ./chapter_sorting/

运行时只报告通过/失败结果,不打印测试内的fmt.Println内容。要查看测试函数里打印的排序结果,加-v参数:

go test -v ./chapter_sorting/

-v模式下,go test会逐个显示测试名以及测试的标准输出。示例输出(依据测试代码推断,实际时间数值可能不同):

=== RUN TestQuickSort 快速排序完成后 nums = [1 1 2 3 4 5] --- PASS: TestQuickSort (0.00s) === RUN TestQuickSortMedian 快速排序(中位基准数优化)完成后 nums = [1 1 2 3 4 5] --- PASS: TestQuickSortMedian (0.00s) === RUN TestQuickSortTailCall 快速排序(递归深度优化)完成后 nums = [1 1 2 3 4 5] --- PASS: TestQuickSortTailCall (0.00s) PASS ok github.com/krahets/hello-algo/chapter_sorting 0.001s

如果只想运行模块里全部章节的测试,用./...匹配所有包:

go test ./...

如果想按测试名筛选,用-run参数,其值是正则表达式。由于TestQuickSortMedianTestQuickSortTailCall都以TestQuickSort为前缀,直接写-run TestQuickSort会连带跑完三个测试;要精确只跑一个,用^...$锚定:

go test -v -run '^TestQuickSort$' ./chapter_sorting/

查看测试输出与判断结果

运行后按以下方式判断结果:

  • 没有FAIL,输出末尾出现ok加模块路径、包名的行(如上例中ok github.com/krahets/hello-algo/chapter_sorting),表示该包的测试全部通过;
  • -v模式下每个测试函数前会打印=== RUN 测试名,其后跟的是测试内fmt.Println的标准输出,也就是你要核对的排序结果;
  • 测试函数内出现 panic 或程序异常时,对应测试显示--- FAIL,包结果变为FAIL,此时需要根据输出中的报错位置回到源码文件(如quick_sort.go)排查。

核对排序结果时,对照测试代码中的初始数组[4 1 3 1 5 2]:三个版本排序完成后打印的数组都应为升序的[1 1 2 3 4 5],这就是当前测试通过且算法行为符合预期的直观依据。

限制与下一步

  • 测试命令只能在codes/gogo.mod所在目录)下运行,在其他目录执行会找不到包;
  • 测试输出是算法的正常运行打印,不是性能或正确性的自动断言,结果判断仍依赖你自己比对打印出的数组;
  • 仓库各语言目录(en/ja/ru/等)下还有各自的codes/go副本,本文以根目录codes/go为准。

测试跑通后,可以结合 快速排序图解文档 阅读算法原理,按同样的方式运行其他章节(如chapter_searchingchapter_dynamic_programming)的*_test.go测试,把每章练习都实际跑一遍。

【免费下载链接】hello-algo《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持简中、繁中、English、日本語,提供 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 等代码实现项目地址: https://gitcode.com/GitHub_Trending/he/hello-algo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询