
go性能统计
统计方法执行时间
很方便就可以统计出方法的耗时,注意如果是多个defer的话,则是先进后出的顺序执行!!!
你如果想看某个方法的耗时,就在这个方法的第一行使用该方法。如果你在一个方法内部多次使用defer,其实统计的是,从defer开始到所属的方法结束的耗时!!!
go
package main
import (
"fmt"
"time"
)
// TimeTracker 是一个用于统计函数耗时的辅助函数
// 它返回一个闭包,该闭包在被 defer 调用时会打印耗时
func TimeTracker(operationName string) func() {
start := time.Now()
return func() {
elapsed := time.Since(start) // 计算耗时
fmt.Printf("📊 [%s] 执行耗时: %v\n", operationName, elapsed)
}
}
// ------------------- 使用示例 -------------------
func main() {
// 示例1:统计一个简单函数的耗时
fmt.Println("=== 统计 longRunningTask 耗时 ===")
defer TimeTracker("longRunningTask")()
// 模拟耗时操作
time.Sleep(2 * time.Second)
fmt.Println("任务完成")
// 示例2:统计另一个操作
fmt.Println("\n=== 统计 databaseQuery 耗时 ===")
defer TimeTracker("databaseQuery")()
time.Sleep(500 * time.Millisecond)
fmt.Println("数据库查询完成")
// 示例3:封装在一个函数内使用
doSomethingCritical()
}
// 你可以在任何函数内部使用
func doSomethingCritical() {
fmt.Println("\n=== 统计 doSomethingCritical 耗时 ===")
defer TimeTracker("doSomethingCritical")()
// 模拟一些工作
time.Sleep(100 * time.Millisecond)
fmt.Println("关键任务执行完毕")
}结果
text
=== 统计 longRunningTask 耗时 ===
任务完成
=== 统计 databaseQuery 耗时 ===
数据库查询完成
=== 统计 doSomethingCritical 耗时 ===
关键任务执行完毕
📊 [doSomethingCritical] 执行耗时: 100.5299ms
📊 [databaseQuery] 执行耗时: 600.8782ms
📊 [longRunningTask] 执行耗时: 2.6015957s
