在go混乱中创建新类型
我有这样的代码:在go混乱中创建新类型,go,Go,我有这样的代码: type ErrNegativeSqrt float64 为什么有这样的结构 float64(ErrNegativeSqrt(-2)) 哪个“机制”用于将-2存储在ErrNegativeSqrt中?ErrNegativeSqrt是类型而不是变量。值存储在变量中 type ErrNegativeSqrt float64 // x is a variable of type ErrNegativeSqrt with an initial value of -2 var x Er
type ErrNegativeSqrt float64
为什么有这样的结构
float64(ErrNegativeSqrt(-2))
哪个“机制”用于将-2存储在
ErrNegativeSqrt
中?ErrNegativeSqrt
是类型
而不是变量。值存储在变量中
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应用于复数常量,复数应用于数字
常数。布尔真值由预先声明的
常数真与假。预先声明的标识符iota表示
整数常量
数值常量表示任意精度的值,而不是
溢出
常量可以是类型化的,也可以是非类型化的。文字常量,真,假,
iota,以及某些仅包含非类型的常量表达式
常量操作数是非类型化的
常量可以通过常量声明或
转换,或在变量声明或
赋值或作为表达式中的操作数
转换是形式为T(x)的表达式,其中T是一个类型,x是
是一个可以转换为T类型的表达式
ErrNegativeSqrt(-2)
是一种转换。非类型化常量-2
被转换为类型ErrNegativeSqrt
,因为作为操作数,它可以在ErrNegativeSqrt
的float64
基础类型中表示。ErrNegativeSqrt(-2)是可能的,因为ErrNegativeSqrt是内部的float64,规范将其描述为能够保持“IEEE-754 64位浮点数”
这称为转换,请参见此处:。它描述了如何在兼容时将另一个值转换为该类型来创建值。此处-2可以表示为float64。请参见我的修订答案。
ErrNegativeSqrt(-2)
是一种转换。