Между временем запуска и вызовами time.Since()
очень мало кода, в первом примере всего лишь несколько конкатенаций строк и вызов fmt.Print()
, во втором примере всего один вызов fmt.Print()
.Они выполняются вашим компьютером очень быстро.
Настолько быстро, что результат, скорее всего, меньше миллисекунды.И вы печатаете истекшее время, используя глагол %.2f
, который округляет секунды до двух цифр дроби.Это означает, что если прошедшее время меньше 0.005 sec
, оно будет округлено до 0
.Вот почему вы видите 0.00s
напечатано.
Если вы измените формат на %0.12f
, вы увидите что-то вроде:
Took 0.000027348000s
Took 0.000003772000s
Также обратите внимание, что time.Duration
значение, возвращаемое time.Since()
, реализует fmt.Stringer
и интеллектуально «форматирует» себя в единицу, которая является более значимой.Таким образом, вы можете напечатать его как есть.
Например, если вы напечатаете это так:
fmt.Println("Took", time.Since(start))
fmt.Println("Took", time.Since(start2))
Вы увидите вывод примерно такой:
Took 18.608µs
Took 2.873µs
Также обратите внимание, что если вы хотите измерить производительность некоторого кода, вам следует использовать встроенные средства тестирования и тестирования Go, а именно пакет testing
.Подробнее см. Порядок кода и производительности .