2013-07-03 41 views
2

我有这样的代码:创造新类型的去混淆

type ErrNegativeSqrt float64 

为什么这样的结构可用?

float64(ErrNegativeSqrt(-2)) 

哪个'mechanics'用于存储-2在ErrNegativeSqrt

回答

4

ErrNegativeSqrttype不是变量。值存储在变量中。

type ErrNegativeSqrt float64 
// x is a variable of type ErrNegativeSqrt with an initial value of -2 
var x ErrNegativeSqrt = -2 

UPDATE:

转到编程语言规范

Constants

有布尔常量,符文常量,整型常量 浮点常量,复合常量和字符串常量。 字符,整数,浮点数和复数常量是统称为数值常量的 。

恒定值由符文,整数,浮点表示, 虚数,或字符串文字,标识符表示一个常数, 常量表达式,用结果为常数,或 的一个转换某些内置函数的结果值,如unsafe.Sizeof 应用于任何值,应用于某些表达式的cap或len,real和 将应用于复数常数和复数的imag应用于数字 常量。布尔真值由预定义的 常量true和false表示。预先标识的标识符iota表示一个整数常量 。

数字常数表示任意精度的值,并且不会 溢出。

常量可以是键入的或无类型的。文字常量,真,假,只包含无类型的恒定表达式 常量操作数是无类型的。

一个常量可以通过常量声明或 转换明确给出类型,或者在变量声明或赋值中或在表达式中用作操作数时隐式地赋予常量类型。

Conversions

换算的形式为T(x),其中T是一个类型,并且x 是可被转换为类型T.

ErrNegativeSqrt(-2)是转换表达式的表达式。无类型常量-2转换为ErrNegativeSqrt类型,因为作为操作数,它可以表示为ErrNegativeSqrtfloat64基础类型。

+0

是的,但为什么'ErrNegativeSqrt(-2)'是可能的? –

+1

看到我的修改答案。 'ErrNegativeSqrt(-2)'是一个转换。 – peterSO

1

这就是所谓的转换,在这里看到:http://golang.org/ref/spec#Conversions。它描述了如何在兼容时通过将另一个值转换为该类型来创建值。这里-2可以表示为float64。