Golang 函数耗时统计

这篇具有很好参考价值的文章主要介绍了Golang 函数耗时统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 常规写法

package main
import (
	"fmt"
	"time"
)

func main() {
	bT := time.Now()            // 开始时间
	time.Sleep(5*time.Second)
	eT := time.Since(bT)      // 从开始到当前所消耗的时间

	fmt.Println("Run time: ", eT)
}

运行结果:

Run time:  5.001531s

2 原始方式

在函数起始位置计算当前时间,在函数结束位置算出耗时。

package main
import (
	"fmt"
	"time"
)

func sum(n int) int {
	var total int
	startT := time.Now()//计算当前时间    total := 0
    	for i:=1; i <= n; i++ {
        	total += i
    	}
	tc := time.Since(startT)//计算耗时
	fmt.Printf("time cost = %v\n", tc)
    	return total
}
func main() {
    	count := sum(100)
	fmt.Printf("count = %v\n", count)
}

运行结果:

time cost = 250ns
count = 5050

3 简洁方法

计算当前时间与计算耗时放在两处,难免显得丑陋,且不易阅读。如果有多个函数需要统计耗时,那么多处书写重复的两行代码会造成代码冗余。由于 Golang 提供了函数延时执行的功能,借助 defer ,可以通过函数封装的方式来避免代码冗余。 

package main
import (
	"fmt"
	"time"
)

//耗时统计函数
func timeCost(start time.Time){
	tc:=time.Since(start)
	fmt.Printf("time cost = %v\n", tc)
}
func sum(n int) int {
	defer timeCost(time.Now())
    	total := 0
    	for i:=1; i <= n; i++ {
        	total += i
    	}
	return total
}
func main() {
    	count := sum(100)
	fmt.Printf("count = %v\n", count)
}

运行结果:

time cost = 333ns
count = 5050

通过输出可以看到sum()耗时增加了,因为增加了一次timeCost()函数调用。不过相比于函数封装带来的便利与代码美观,新增的耗时是微不足道可以接受的。 

4 优雅方法

每次调用耗时统计函数timeCost()都需要传入time.Now(),重复书写time.Now()无疑造成了代码冗余。在上面的基础上,进行进一步的封装,实现如下:

package main
import (
	"fmt"
	"time"
)
//耗时统计函数
func timeCost() func() {
	start := time.Now()
	return func() {
		tc:=time.Since(start)
		fmt.Printf("time cost = %v\n", tc)
	}
}
func sum(n int) int {
	defer timeCost()()//注意,是对 timeCost()返回的函数进行调用,因此需要加两对小括号
    	total := 0
    	for i:=1; i <= n; i++ {
        	total += i
    	}
	return total
}
func main() {
    	count := sum(100)
	fmt.Printf("count = %v\n", count)
}

运行结果:

time cost = 1.204µs
count = 5050

 文章来源地址https://www.toymoban.com/news/detail-577596.html

到了这里,关于Golang 函数耗时统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • golang web学习随便记4-内存、文件、数据库

    我们来开始学习如何存储数据。书中有一点不错,就是并不是一上来就告诉你存储数据使用数据库,因为不同的数据存储适合不同的手段。 先来看在内存中存储数据:下面的例子用结构体方式在内存存放数据,然后利用两个map来表示“索引”,键值对中的值是指向内存中结构

    2024年02月06日
    浏览(248)
  • Golang 程序漏洞检测利器 govulncheck(二):漏洞数据库详解

    上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 的使用方法,govulncheck 强大功能的背后,离不开 Go 漏洞数据库(Go vulnerability database)的支持,接下来详细讲解下 Go 漏洞数据库相关的知识。 在当今数字化的世界中,软件安全是至关重要的。随着 Golang 在开发领域的日

    2024年02月10日
    浏览(35)
  • 使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库

    Golang,也被称为Go,已经成为构建强大高性能应用程序的首选语言。在处理MySQL数据库时,Golang提供了一系列强大的库,简化了数据库交互并提高了效率。在本文中,我们将深入探讨一些最流行的Golang MySQL数据库库,通过实际示例来探索它们的功能。 GORM是用于Golang的功能丰富

    2024年02月08日
    浏览(54)
  • 【Golang星辰图】数据管理利器:Go编程语言中的数据库和搜索引擎综合指南

    Go编程语言是一种强大、类型安全且高效的编程语言,它在处理数据库和搜索引擎方面有着广泛的应用。本篇文章将详细介绍几个Go编程语言中常用的数据库和全文搜索引擎,包括Go-bleve、Go-pgx、Go-leveldb/leveldb、Go-xorm、Go-mysql-driver和Go-bbolt/bbolt。对于每个工具,我们将介绍其功

    2024年03月26日
    浏览(72)
  • 分布式数据库NoSQL(四)——MongoDB 之聚合函数查询统计

    MongoDB 中聚合( aggregate )主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,通常由聚合管道操作符和聚合表达式组合,完成数据处理。功能有点类似 Sql 语句中的 sum()、agv() 等。 目录 第1关:聚合管道操作符将文档定制格式输出(一) 常用聚合管道操作符

    2024年02月09日
    浏览(49)
  • 纯干货:数据库连接耗时慢原因排查

    最近公司的社区相关的服务需要优化,由于对业务不熟悉,只能借助监控从一些慢接口开始尝试探索慢的原因。由于社区相关的功能务是公司小程序流量入口,所以相应的服务访问量还是比较高的。针对这类高访问的项目,任何不留神的地方都可能会引起连锁反应导致瓶颈,

    2024年02月07日
    浏览(37)
  • 存储过程、触发器、游标、视图、自定义函数 字段类型、字段可空、统计字段、逻辑删除 权限系统数据库&无限极类别设计

    在数据库设计中,存储过程、触发器、游标、视图、自定义函数、字段类型、字段可空、统计字段、逻辑删除以及权限系统和无限级类别设计都是重要的概念。下面我将逐一解释这些概念,并提供相关的设计建议。 存储过程 (Stored Procedure) 定义 :存储过程是一组为了完成特定

    2024年03月09日
    浏览(128)
  • 耗时6个月,我做了一款干净、免费、开源的AI数据库管理工具

    在消失的这段时间,我和小伙伴们做了一款集成了AI的数据库管理工具Chat2DB。 他是数据库也集成了AIGC的能力,能够将自然语言转换为SQL,也可以将SQL转换为自然语言,还可以给出SQL的优化建议,可以极大提升效率。 GitHub地址:https://github.com/chat2db/chat2db 官网地址:https://ch

    2024年02月13日
    浏览(71)
  • 耗时6个月,我们做了一款干净、免费、开源的AI数据库管理工具

    在消失的这段时间,我和小伙伴们做了一款集成了AI的数据库管理工具Chat2DB。 他是数据库也集成了AIGC的能力,能够将自然语言转换为SQL,也可以将SQL转换为自然语言,还可以给出SQL的优化建议,可以极大提升效率。 GitHub地址:https://github.com/chat2db/chat2db 官网地址:https://ch

    2024年02月13日
    浏览(73)
  • Golang每日一练(leetDay0065) 位1的个数、词频统计

    目录 191. 位1的个数 Nnumber of 1-bits  🌟 192. 统计词频 Word Frequency  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为

    2024年02月06日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包