在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)
是一种转换。