1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Golang 函数耗时统计

Golang 函数耗时统计

时间:2022-04-21 04:10:08

相关推荐

Golang 函数耗时统计

当时候需要去计算一段代码或一个程序所消耗时间的时候,就需要进行统计时间,用程序去计算某一段代码的执行所需要的时间远比用眼睛直接去看程序运行时间高很多。

go语言中的 time 包中提供了函数来提供计算消耗时间,具体的使用方式如下案例所示:

bT := time.Now() // 开始时间eT := time.Since(bT)// 从开始到当前所消耗的时间fmt.Println("Run time: ", eT)

一、简单方法

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

package mainimport ("fmt""time")func sum(n int) int {startT := time.Now()//计算当前时间total := 0for 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 = 350nscount = 5050

二、简洁方法

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

package mainimport ("fmt""time")//@brief:耗时统计函数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 := 0for i:=1; i <= n; i++ {total += i}return total}func main() {count := sum(100)fmt.Printf("count = %v\n", count)}

编译运行输出:

time cost = 1.574µscount = 5050

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

三、优雅方法

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

package mainimport ("fmt""time")//@brief:耗时统计函数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 := 0for i:=1; i <= n; i++ {total += i}return total}func main() {count := sum(100)fmt.Printf("count = %v\n", count)}

编译运行输出:

time cost = 1.204µscount = 5050

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。