Skip to content
鼓励作者:欢迎打赏犒劳

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

如有转载或 CV 的请标注本站原文地址