我有这样的代码:
type ErrNegativeSqrt float64
为什么这样的构造可用?
float64(ErrNegativeSqrt(-2))
哪个“机制”用于存储 -2 ErrNegativeSqrt
?
我有这样的代码:
type ErrNegativeSqrt float64
为什么这样的构造可用?
float64(ErrNegativeSqrt(-2))
哪个“机制”用于存储 -2 ErrNegativeSqrt
?
ErrNegativeSqrt
是一个type
非变量。值存储在变量中。
type ErrNegativeSqrt float64
// x is a variable of type ErrNegativeSqrt with an initial value of -2
var x ErrNegativeSqrt = -2
更新:
Go 编程语言规范
有布尔常量、符文常量、整数常量、浮点常量、复数常量和字符串常量。字符、整数、浮点数和复数常量统称为数值常量。
常量值由符文、整数、浮点数、虚数或字符串文字、表示常量的标识符、常量表达式、结果为常量的转换或某些内置函数的结果值表示诸如 unsafe.Sizeof 等函数应用于任何值,cap 或 len 应用于某些表达式,real 和 imag 应用于复数常量,复数应用于数值常量。布尔真值由预先声明的常量 true 和 false 表示。预先声明的标识符 iota 表示一个整数常量。
数字常量表示任意精度的值并且不会溢出。
常量可以有类型或无类型。文字常量、true、false、iota 和某些仅包含无类型常量操作数的常量表达式是无类型的。
常量可以通过常量声明或转换显式地赋予类型,或者在用于变量声明或赋值或作为表达式中的操作数时隐式赋予。
转换是 T(x) 形式的表达式,其中 T 是一个类型,x 是一个可以转换为 T 类型的表达式。
ErrNegativeSqrt(-2)
是一种转换。无类型常量-2
被转换为类型ErrNegativeSqrt
,因为作为操作数,它可以在ErrNegativeSqrt
的 float64
基础类型中表示。
ErrNegativeSqrt(-2) 是可能的,因为 ErrNegativeSqrt 在内部是一个 float64,规范将其描述为能够保存“IEEE-754 64 位浮点数”。
这称为转换,请参见此处: http: //golang.org/ref/spec#Conversions。它描述了如何通过在兼容时将另一个值转换为该类型来创建一个值。而这里的 -2 可以表示为 float64。