持续时间的时间单位

Unit of time for duration

代码里有

    fmt.Println("... ", time.Since(s1))

    fmt.Println(".... ", time.Since(s2))

第一个的结果总是 µs,第二个的结果总是 ns(例如 7.081µs,分别为 365ns)。

这是什么原因造成的?我该如何控制它?我希望显示 7081ns,总是 ns/

我看了函数;我该如何解释?

// 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)

}

fmt 包调用 time.Duration.String() method (because time.Duration implements the fmt.Stringer 接口),如果持续时间小于一秒,它将使用更小的单位(毫秒、微秒或纳秒)。您无法直接控制它。

然而,您可以使用 Itoa 将 duration.Nanoseconds() 返回的纳秒数转换为字符串,例如像这样:

formatted := strconv.Itoa(int(time.Since(s2).Nanoseconds())) + "ns"

You can also see this example on the playground