加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Go语言怎样获取函数执行时间

发布时间:2023-07-15 14:15:30 所属栏目:语言 来源:
导读:这篇文章主要介绍了Go语言如何获取函数执行时间的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何获取函数执行时间文章都会有所收获,下面我们一起来看看吧。

在Go语言中
这篇文章主要介绍了Go语言如何获取函数执行时间的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何获取函数执行时间文章都会有所收获,下面我们一起来看看吧。
 
在Go语言中,可以使用time包中的Since()函数来获取函数执行时间。在函数执行之前设置一个起始时间,并在函数运行结束时获取从起始时间到现在的时间间隔,这个时间间隔就是函数的执行时间;而函数执行时间可以使用time.Since()函数计算,语法“time.Since(t)”,会返回从t到现在经过的时间。
 
使用time.Since计算执行时间
 
函数的运行时间的长短是衡量这个函数性能的重要指标,特别是在对比和基准测试中,要得到函数的运行时间,最简单的办法就是在函数执行之前设置一个起始时间,并在函数运行结束时获取从起始时间到现在的时间间隔,这个时间间隔就是函数的运行时间。
 
在Go语言中我们可以使用 time 包中的 Since() 函数来获取函数的运行时间,Go语言官方文档中对 Since() 函数的介绍是这样的。
 
func Since(t Time) Duration
 
Since() 函数返回从 t 到现在经过的时间,等价于time.Now().Sub(t)。
 
示例1:使用 Since() 函数获取函数的运行时间
 
package main
 
import (
 
    "fmt"
 
    "time"
 
)
 
func test() {
 
    start := time.Now() // 获取当前时间
 
    sum := 0
 
    for i := 0; i < 100000000; i++ {
 
        sum++
 
    }
 
    elapsed := time.Since(start)
 
    fmt.Println("该函数执行完成耗时:", elapsed)
 
}
 
func main() {
 
    test()
 
}
 
运行结果如下所示:
 
该函数执行完成耗时: 39.8933ms
 
上面我们提到了 time.Now().Sub() 的功能类似于 Since() 函数,想要使用 time.Now().Sub() 获取函数的运行时间只需要把我们上面代码的第 14 行简单修改一下就行。
 
示例2:使用 time.Now().Sub() 获取函数的运行时间
 
package main
 
import (
 
    "fmt"
 
    "time"
 
)
 
func test() {
 
    start := time.Now() // 获取当前时间
 
    sum := 0
 
    for i := 0; i < 100000000; i++ {
 
        sum++
 
    }
 
    elapsed := time.Now().Sub(start)
 
    fmt.Println("该函数执行完成耗时:", elapsed)
 
}
 
func main() {
 
    test()
 
}
 
运行结果如下所示:
 
该函数执行完成耗时: 36.8769ms
 
由于计算机 CPU 及一些其他因素的影响,在获取函数运行时间时每次的结果都有些许不同,属于正常现象。
 
扩展知识:使用time.Now().Sub()计算时间差
 
我们只需将time.Since()替换成 time.Now().Sub() 即可,如下:
 
    start := time.Now() // 获取当前时间
 
    sum := 0
 
    for i := 0; i < 100000000; i++ {
 
        sum++
 
    }
 
    elapsed := time.Now().Sub(start)
 
    fmt.Println(elapsed)
 
其实time.Since内部调用了Sub函数,我们进入time包看,注释的意思是,Since返回从t开始经过的时间, time.Since 是 time.Now().Sub(t) 的简写方式,
 
\src\time\time.go 923:6
 
// Since returns the time elapsed since t.
 
// It is shorthand for time.Now().Sub(t).
 
func Since(t Time) Duration {
 
    var now Time
 
    if t.wall&hasMonotonic != 0 {
 
        // Common case optimization: if t has monotonic time, then Sub will use only it.
 
        now = Time{hasMonotonic, runtimeNano() - startNano, nil}
 
    } else {
 
        now = Now()
 
    }
 
    return now.Sub(t)
 
}
 
当我们也可以使用 time.Now().Sub(start).Seconds()获取经过多少秒,Hours获取经过的小时数等,对应的也可以简写为time.Since(start).Seconds()、time.Since(start).Seconds()等。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!