Длительность представляет собой время, прошедшее между двумя мгновений как количество наносекунд int64. Представление ограничивает наибольшую отображаемую продолжительность примерно до 290 лет. int64
значений.
time.Second
- это (типизированная) константа, содержащая количество наносекунд в одной секунде, поэтому умножение ее на 10
даст вам количество наносекунд в 10 секунд. Это «идеально» вписывается в число int64
. Как указано в документации, int64
может хранить количество наносекунд примерно до 290 лет.
Теперь, если t
содержит количество наносекунд в 10 секундах, и вы умножаете это на количество наносекунд в 1 секунду , используя 64-битные целые числа, которые будут переполняться:
fmt.Println(math.MaxInt64)
fmt.Print(int64(10*time.Second), "*", int64(time.Second))
Выводы:
9223372036854775807
10000000000*1000000000
Обратите внимание, что t
- это переменная, поэтому переполнение допустимо. Константы в Go являются точными значениями и не переполняются. Таким образом, 10 * time.Second * time.Second
будет постоянным значением, которое не вписывается в int64
и, следовательно, выдает ошибку, когда вы пытаетесь присвоить результат переменной, поддерживаемой int64
. Подробнее см. Отличается ли оценка Go компилятора для константного выражения и другого выражения