猿问

如何理解golang中两个命名类型相同

类型标识规则规定:

Two named types are identical if their type names originate in the same TypeSpec

我不太明白两个类型名称如何起源于同一个 TypeSpec。你能解释一下或者给我举个例子吗?


小怪兽爱吃肉
浏览 346回答 2
2回答

jeck猫

只有一个类型名称可以源自 TypeSpec。这就是重点。所以type Foo int64var x Foovar y Foo那么两个Foos 都源自相同的 TypeSpec,因此它们是相同的Foos。但是,如果您有两个不同的文件(在不同的包中):前:type Foo int64var x Foob.去:type Foo int64var y Foo那么Foo这种情况下的两个s就不一样了。尽管它们是相同的类型名称,但它们源自不同的 TypeSpec。这样做的结果是,类型x和y不相同(且因此x = y不进行强制转换是不允许的)。

HUH函数

Two named types are identical if their type names originate in the same TypeSpec事实上,在 Go 代码中不能有两个相同的命名类型。因为在 Go 代码中,originate in the same TypeSpec意味着相同的类型。说一种类型与自身相同是没有意义的。但是我们确实有不同的命名类型,它们是相同的:byte 和 uint8;符文和 int32,根据 规范只能在编译器中为预先声明的类型执行此操作。参考golang 坚果中的讨论注意:在 Go 1.9 中,将有一个名为:类型别名/别名声明的新功能。使用此功能,可以声明相同的不同命名类型。参考讲Go 1.9
随时随地看视频慕课网APP

相关分类

Go
我要回答