持续时间的时间单位
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"
代码里有
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"