Единица времени для продолжительности - PullRequest
0 голосов
/ 08 февраля 2020

Я имею в коде

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

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

Результаты для первого всегда в мкс , а для второго в нс (например, 7,081 мкс, соответственно 365нс).

Что вызывает это? Как я могу это контролировать? Я бы хотел, чтобы отображалось 7081 нс, всегда 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)

}

1 Ответ

0 голосов
/ 08 февраля 2020

Пакет fmt вызывает метод time.Duration.String() (поскольку time.Duration реализует интерфейс fmt.Stringer), который будет использовать меньшие единицы (милли-, микро-, или наносекунды), если продолжительность составляет менее одной секунды. Вы не можете управлять этим напрямую.

Однако вы можете преобразовать число наносекунд, возвращаемых из duration.Nanoseconds(), в строку, используя Itoa, например, так:

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

Вы также можете увидеть этот пример на детской площадке

...