Golang 中的基准测试如何使用?

golang 中的基准测试如何使用?

Go 中的基准测试:指南和实战案例

在 Golang 中,基准测试是评估和分析代码性能的有力工具。它允许开发人员衡量函数或代码块的执行时间,从而识别性能瓶颈并进行改进。

基本语法

基准测试函数以 Benchmark 前缀命名,接受一个 b 类型为 *testing.B 的参数。Benchmark 函数的主循环在 b.RunParallel 下执行。使用 b.N 方法可以获取循环次数。

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

func BenchmarkSqrt(b *testing.B) {    for i := 0; i 

运行基准测试

要运行基准测试,请使用 go test 命令并提供 -bench 标志。该标志表明要运行以 Benchmark 前缀命名的函数。

$ go test -bench=.

登录后复制

分析结果

基准测试的结果显示在控制台输出中。对于每个基准测试函数,它将显示以下指标:

ns/op:单个操作(循环一次)的纳秒数MB/s:输入数据的大小(以兆字节为单位)除以操作时间(以秒为单位)B/op:单个操作的字节数

最佳实践

使用 b.ReportAllocs 追踪分配。移除不必要的代码以获得准确的测量结果。使用 b.Skip() 来跳过特定条件下的基准测试。平行化基准测试以提高准确性。

实战案例:排序算法比较

为了演示,让我们对三种排序算法(内置的 sort 包、Go 1.18 中引入了的 container/heap 包,以及快速排序)进行基准测试。

import (    "sort"    "container/heap"    "math/rand")func randomIntSlice(n int) []int {    s := make([]int, n)    for i := range s {        s[i] = rand.Intn(n)    }    return s}func BenchmarkSort(b *testing.B) {    b.RunParallel(func(pb *testing.PB) {        for pb.Next() {            s := randomIntSlice(10000)            sort.Ints(s)        }    })}func BenchmarkHeapSort(b *testing.B) {    b.RunParallel(func(pb *testing.PB) {        for pb.Next() {            s := randomIntSlice(10000)            heap.Sort(s)        }    })}func BenchmarkQuickSort(b *testing.B) {    b.RunParallel(func(pb *testing.PB) {        for pb.Next() {            s := randomIntSlice(10000)            quickSort(s)        }    })}func quickSort(a []int) {    if len(a)  pivot {            right--        }        if left 

运行上述基准测试后,我们得到以下输出:

BenchmarkSort               636705 ns/opBenchmarkHeapSort          645853 ns/opBenchmarkQuickSort         837199 ns/op

登录后复制

这表明内置的 sort 包在 10000 个随机整数的列表上表现最佳。

以上就是Golang 中的基准测试如何使用?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2319808.html

(0)
上一篇 2025年2月28日 17:08:28
下一篇 2025年2月23日 06:08:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何在 Golang 中测试 Web API?

    如何在 Golang 中测试 Web API? 在 Golang 中测试 Web API 至关重要,以确保应用程序以预期的方式运行。本文将介绍使用[ httptest 包](https://pkg.go.dev/net/http/httpt…

    2025年2月28日
    200
  • Golang 函数的 Goroutine 调度与并发

    在 golang 中,使用 goroutine 实现函数的并发涉及以下步骤:创建 goroutine:使用 go 关键字执行函数或函数调用,例如:go func() { // goroutine 中的代码 }()。调度策略:golang 使…

    2025年2月28日
    200
  • 在 Golang 中测试函数时需要注意哪些常见问题?

    在 golang 函数测试中常见的 4 个问题包括:并发测试需要独立运行每个测试案例。对于依赖外部服务的函数,应使用 mock 对象来模拟。确保测试覆盖尽可能多的代码路径。验证函数参数的有效性并报告错误。 在 Golang 中测试函数时的常…

    2025年2月28日
    200
  • Golang 中的覆盖率测试如何实现?

    Go 中的覆盖率测试 覆盖率测试是软件测试中一种重要的技术,它可以衡量代码的测试覆盖程度。在 Go 语言中,可以通过使用 testing 包和覆盖率工具来实现覆盖率测试。 使用 testing 包 首先,导入 testing 包: 立即学习…

    2025年2月28日
    200
  • 如何在 Golang 中使用表格驱动的测试?

    如何在 Golang 中使用表格驱动的测试? 表格驱动的测试(Table-Driven Testing)是一种软件测试技术,它使用数据表来为测试用例提供输入。这种方法可以帮助简化测试代码,并且更容易维护。 在本教程中,我们将向您展示如何在 …

    2025年2月28日
    200
  • 如何在 Golang 中进行性能测试?

    使用 golang 中的 benchmark 函数进行性能测试:在 benchmark 函数中执行要测试的操作;比较不同算法的性能,例如递归和迭代斐波那契计算;性能测试结果显示执行时间和每秒操作数。 在 Golang 中进行性能测试 性能测…

    2025年2月28日
    200
  • Golang 单元测试与函数测试的区别

    单元测试针对最小单元,而函数测试针对高级行为和应用程序逻辑;单元测试独立于应用程序其他部分,而函数测试可能依赖于外部服务或数据;单元测试通常不需要模拟,而函数测试需要模拟与其他部分的交互。实战案例:在 createuser 函数中,单元测试…

    2025年2月28日
    200
  • 具有多个 YAML 文件的开放 API 规范

    记录过 REST API 的每个人都知道编写包含所有这些资源、路径、请求和架构的整个 YAML 文件是什么感觉,但突然您发现自己保存的文件的最后一行有 5 位数字长度。是的,很痛苦。 由于最好的应用程序是我们自己构建的应用程序,我发现自己在…

    2025年2月28日
    200
  • Golang 函数:如何管理 goroutine 的生命周期?

    Go 函数:管理 goroutine 生命周期 在 Go 中,goroutine 是并发执行的轻量级线程。管理它们的 生命周期至关重要,以避免内存泄漏和死锁等问题。 Goroutine 生命周期 goroutine 生命周期包括以下阶段: …

    2025年2月28日
    200
  • Golang 函数的未来: 探索创新和变革

    go 函数正在不断创新和变革,以满足复杂软件开发需求。异步函数、泛型、改进的错误处理、元编程和嵌入函数等技术引入如下:异步函数:并行执行任务,不阻塞主线程。泛型:定义可用于各种数据类型的函数。错误处理改进:提供对错误的细粒度控制。元编程:在…

    2025年2月28日
    200

发表回复

登录后才能评论