Golang 函数耗时统计

本文介绍了在Go语言中如何使用time包来统计函数执行时间,包括简单方法、简洁方法和优雅方法。通过示例代码展示了如何利用defer和闭包来减少代码冗余,提高代码可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

一、简单方法

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

package main

import (
    "fmt"
    "time"
)

func sum(n int) 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 = 350ns
count = 5050

二、简洁方法

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

package main

import (
    "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 := 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.574µs
count = 5050

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

三、优雅方法

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

package main

import (
    "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 := 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值