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