使用time.Since计算执行时间差

3,237 阅读1分钟

想要获取计算某个任务从开始到结束的运行时间,我们可以使用time包中的Slice函数

  start := time.Now() // 获取当前时间
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum++
    }
    elapsed := time.Since(start)

我们执行100000000次的加操作,time.Now 获取当前的时间, time.Since可以计算出一个事件戳到当前的时间差。 运行结果如下:

该函数执行完成耗时: 39.8933ms

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