Integer和
int
int您的新类型
Integer是2种不同的不同类型。在
Integer预期的地方,您必须传递type的值
Integer。
如果有
Integer值,则可以使用简单的类型转换将其设为type的值
int,因为的基础类型
Integer为
int:
var i Integer = 5nf(int(i))
同时可能令人困惑和有趣的是,您可以不经过转换就传递未类型的常量:
nf(5)
在Go Playground上尝试一下。
原因是在规范中:可分配性:
在以下任何一种情况下,值
x都可以 分配 给类型的变量T(“x可以分配给T”):[…]
x是可由type值表示的无类型常量T。
5是一个无类型的常量,可以用type的值表示,
int因为该无类型的常量
5具有默认类型
int,所以它可以用type的值
Integer(具有相同的默认类型)表示。
如果您检查其他可分配性规则(上面的报价中未包括),则它们都不与尝试为
Integer类型的参数传递值的情况匹配
int,因此不允许这样做。
请参阅相关问题:Golang:创建常量类型并限制类型的值
RuneFunc和
func(rune) rune
此案例与上一个案例(
Integer和
int)之间的区别在于,它
int是命名类型,
func(rune)rune不是。
有一个可分配性规则允许这样做:
*
x的类型,V并且T具有相同的基础类型,并且至少是V或T不是命名类型。
因此,在这种情况下:
var f RuneFuncff(f)
f是一个命名的类型,但是参数类型
ff()就是
func(rune) rune它是无名的,所以转让是允许的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)