• 技术文章 >后端开发 >Golang

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

    青灯夜游青灯夜游2023-01-17 10:23:06原创49

    在Go语言中,可以使用time包中的Since()函数来获取函数执行时间。在函数执行之前设置一个起始时间,并在函数运行结束时获取从起始时间到现在的时间间隔,这个时间间隔就是函数的执行时间;而函数执行时间可以使用time.Since()函数计算,语法“time.Since(t)”,会返回从t到现在经过的时间。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    使用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()等。

    【相关推荐:Go视频教程编程教学

    以上就是Go语言怎么获取函数执行时间的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Golang go语言
    上一篇:Go语言怎么判断指定字符是否存在 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言怎么获取list长度• go语言中list怎么删除元素• go语言变量有几种作用域• VSCode支持go语言吗• go语言中join方法有什么用
    1/1

    PHP中文网