这行:
s := time.Hour/73.0
是一个简短的变量声明,右侧表达式为:
time.Hour/73.0。
time.Hour是
time包中的类型常量,其类型为
time.Duration;并且
73.0是一种
无类型数值常量
,其在表达时,将可能的话采取适当的类型。由于
time.Duration具有
int64作为其基础类型,因此
73.0可以在
time.Duration不损失精度的情况下将常量转换为常量,从而
time.Hour/ time.Duration(73.0)可以执行常量表达式。
另一行:
d := 73.0s := time.Hour/d
第一行是一个简短的变量声明,其中的类型
d将从右边的表达式中推断出来,这是一个无类型的数字常量(确切地说是带浮点字面量)。由于需要一种类型,因此将使用其默认类型
float64。因此
d将是type的变量
float64。
下一行的简短变量声明:
time.Hour /d,这
time.Hour也是type的值
time.Duration,但是您尝试将其除以type的值
float64,这在Go中是不允许的。
要使其工作,您必须显式转换
d为
time.Duration:
s := time.Hour / time.Duration(d)
或
d必须为类型
time.Duration:
d := time.Duration(73.0)s := time.Hour / d
要么:
var d time.Duration = 73.0s := time.Hour / d
time.Duration例如,如果值不能用表示,则这些将不起作用
73.5(因为
time.Duration具有
int64基础类型)。在这种情况下,您必须转换
time.Hour为
float64,执行除法并将结果转换为
time.Duration,例如:
d := 73.5s := time.Duration(float64(time.Hour) / d)
阅读有关该主题的更多详细信息:
规格:常数
围棋博客:常量



