使用time.Since計(jì)算執(zhí)行時(shí)間

想要獲取計(jì)算某個(gè)任務(wù)從開始到結(jié)束的運(yùn)行時(shí)間,我們可以使用time包中的Slice函數(shù)

  start := time.Now() // 獲取當(dāng)前時(shí)間
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum++
    }
    elapsed := time.Since(start)

我們執(zhí)行100000000次的加操作,time.Now 獲取當(dāng)前的時(shí)間, time.Since可以計(jì)算出一個(gè)事件戳到當(dāng)前的時(shí)間差。
運(yùn)行結(jié)果如下:

該函數(shù)執(zhí)行完成耗時(shí): 39.8933ms

使用time.Now().Sub()計(jì)算時(shí)間差
我們只需將time.Since()替換成 time.Now().Sub() 即可,如下:

    start := time.Now() // 獲取當(dāng)前時(shí)間
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum++
    }
    elapsed := time.Now().Sub(start)
    fmt.Println(elapsed)

其實(shí)time.Since內(nèi)部調(diào)用了Sub函數(shù),我們進(jìn)入time包看,注釋的意思是,Since返回從t開始經(jīng)過的時(shí)間, 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)
}

當(dāng)我們也可以使用 time.Now().Sub(start).Seconds()獲取經(jīng)過多少秒,Hours獲取經(jīng)過的小時(shí)數(shù)等,對應(yīng)的也可以簡寫為time.Since(start).Seconds()、time.Since(start).Seconds()等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容