0

0

Go语言性能基准测试:精确运行单个Benchmark函数

聖光之護

聖光之護

发布时间:2025-10-07 13:18:29

|

317人浏览过

|

来源于php中文网

原创

Go语言性能基准测试:精确运行单个Benchmark函数

本教程详细介绍了如何在Go语言项目中,通过go test命令的-bench或-test.bench标志,结合正则表达式精确运行指定的单个性能基准测试函数。文章不仅提供了基本用法示例,还深入探讨了如何利用-run标志跳过常规测试,仅执行基准测试的实用技巧,旨在帮助开发者更高效地进行性能分析和优化。

理解Go语言基准测试

go语言中,性能基准测试(benchmark)是衡量代码性能的关键工具。通常,我们会在与源文件同目录下的_test.go文件中定义基准测试函数,其命名遵循benchmarkxxx的格式,并接收一个*testing.b类型的参数。当项目中存在多个基准测试文件或每个文件中包含多个基准测试函数时,我们可能需要针对特定函数进行独立的性能分析,以快速定位性能瓶颈或验证优化效果。

默认情况下,go test命令并不会运行基准测试。若要执行基准测试,必须明确指定相关标志。

精确运行单个基准测试函数

要运行项目中的一个或多个特定基准测试函数,可以使用go test命令的-bench或-test.bench标志。这两个标志的功能是相同的,用于指定一个正则表达式模式,只有函数名与该模式匹配的基准测试函数才会被执行。

基本语法:

go test -bench <正则表达式模式>

立即学习go语言免费学习笔记(深入)”;

go test -test.bench <正则表达式模式>

示例:

假设您的Go包中有以下基准测试函数:

// map1_benchmark_test.go
func BenchmarkMapTravel(b *testing.B) { /* ... */ }
func BenchmarkMapGet(b *testing.B) { /* ... */ }

// map2_benchmark_test.go
func BenchmarkMapPut(b *testing.B) { /* ... */ }

如果您只想运行BenchmarkMapTravel函数,可以这样做:

go test -bench MapTravel

或者,如果您想运行所有名称中包含"MapGet"的基准测试函数(在本例中就是BenchmarkMapGet):

go test -bench MapGet

这里的MapTravel和MapGet被视为正则表达式模式。如果您的函数名包含特殊字符或需要更精确的匹配,可以使用完整的正则表达式语法。例如,^BenchmarkMapTravel$将只匹配精确的BenchmarkMapTravel。

仅运行基准测试,跳过常规测试

在进行性能分析时,我们通常只关心基准测试的结果,而不希望同时运行耗时的常规单元测试和集成测试。为了实现这一目标,可以结合使用-bench和-run标志。

go test -run标志同样接受一个正则表达式模式,用于匹配并执行常规测试函数(TestXxx)。通过提供一个不会匹配任何测试函数的模式,我们可以有效地跳过所有常规测试。

常用技巧:

GPT Detector
GPT Detector

在线检查文本是否由GPT-3或ChatGPT生成

下载

使用^$作为-run的模式。^$是一个正则表达式,表示匹配字符串的开始和结束,即匹配一个空字符串。由于Go语言的测试函数名不可能为空,因此这个模式不会匹配到任何常规测试函数。

示例:

要仅运行BenchmarkMapTravel基准测试函数,并跳过所有常规测试,可以执行:

go test -bench MapTravel -run=^$

或者,使用一个极不可能匹配的字符串作为模式:

go test -bench MapTravel -test.run=thisexpressionwontmatchanytest

这两种方法都能达到相同的效果:只执行指定的基准测试,而忽略其他常规测试。

正则表达式匹配的灵活性

-bench标志的强大之处在于它支持正则表达式。这意味着您可以根据需要匹配一个或多个基准测试函数:

  • 匹配所有基准测试:

    go test -bench .

    这里的.是正则表达式中的通配符,表示匹配任何字符,因此会运行所有基准测试函数。

  • 匹配所有与特定前缀相关的基准测试:

    go test -bench "Map"

    这将运行所有名称中包含"Map"的基准测试,例如BenchmarkMapTravel和BenchmarkMapGet。

  • 匹配特定文件中的所有基准测试: 虽然-bench直接作用于函数名,但如果您想运行某个文件中的所有基准测试,通常可以通过该文件中的函数命名约定来实现,或者直接进入该文件所在的目录执行命令。

注意事项与最佳实践

  1. 命名规范: 确保您的基准测试函数严格遵循func BenchmarkXxx(b *testing.B)的命名和签名规范,否则go test将无法识别它们为基准测试。
  2. 获取帮助: 如果您对go test的各种标志感到困惑,可以随时在命令行中输入go help testflag来查看详细的帮助文档。
  3. 环境一致性: 性能基准测试的结果受运行环境(CPU、内存、操作系统、其他后台进程)影响很大。为了获得可靠的比较结果,请确保在尽可能一致和干净的环境中运行基准测试。
  4. 多次运行: 单次基准测试结果可能存在偶然性。建议多次运行并观察趋势,或者使用go test -count N参数来运行N次测试,并计算平均值。

总结

通过灵活运用go test -bench和-run标志,Go语言开发者可以精确控制基准测试的执行范围,无论是针对单个函数进行深度分析,还是批量运行特定模式的基准测试,都能高效完成。掌握这些技巧将极大地提升您在Go项目中的性能分析和优化工作效率。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

249

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

213

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

234

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

528

2023.12.06

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

6

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号