types - 如何理解两个命名类型在 golang 中是相同的

标签 types go

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。这样做的结果是 xy 的类型不相同(因此 x = y 没有转换是不允许的)。

关于types - 如何理解两个命名类型在 golang 中是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089670/

相关文章:

python - type函数如何判断对象的类型?

C++ 获取成员函数的类型(返回类型和签名),不带成员函数的 'const' 限定符

类类型作为 Scala 映射中的键

json - 解码 JSON 时出错

types - 如何为角色组编写模块?

c# - 泛型有什么好处,为什么要使用它们?

go - 不确定为什么这是 golang 中的僵局?

Golang - 如何从矩阵中删除一行?

arrays - 如何解压 slice

string - 查找字符串中子字符串的索引,指定起始索引