gpt4 book ai didi

go - time.Duration * time.Duration 应用了两次

转载 作者:行者123 更新时间:2023-12-01 22:32:19 27 4
gpt4 key购买 nike

假设我有:

t := 10 * time.Second // 10s, 
当 time.Second 再次应用时,幕后发生了什么?
tt := t * time.Second // -2346317h47m53.709551616s
https://play.golang.org/p/upyjGgsuVQm

最佳答案

一个 time.Duration value 是表示纳秒数的数值。

A Duration represents the elapsed time between two instants as an int64 nanosecond count. The representation limits the largest representable duration to approximately 290 years.


type Duration int64

无论您在 time.Duration 上执行什么算术运算值,它们以数字方式执行,就像在 int64 上一样值(value)观。
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 支持的变量时会出错.详情见 Does Go compiler's evaluation differ for constant expression and other expression

关于go - time.Duration * time.Duration 应用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62883887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com