type identity的规则声明:
如果两个命名类型的类型名称源自相同的 TypeSpec,则它们是相同的
我不太明白两个类型名称是如何起源于同一个 TypeSpec 的。你能解释一下或给我举个例子吗?
最佳答案
只有一个类型名称可以源自 TypeSpec。这就是重点。所以
type Foo int64
var x Foo
var y Foo
那么两个 Foo
都源自同一个 TypeSpec,因此它们是相同的 Foo
。
但是,如果您有两个不同的文件(在不同的包中):
a.go:
type Foo int64
var x Foo
b.go:
type Foo int64
var y Foo
那么这种情况下的两个 Foo
是不相同的。尽管它们是相同的类型名称,但它们源自不同的 TypeSpec。这样做的结果是 x
和 y
的类型不相同(因此 x = y
没有转换是不允许的)。
关于types - 如何理解两个命名类型在 golang 中是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089670/