一尘不染

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

go

类型标识规则规定:

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

我不太了解两个类型名称是如何在同一TypeSpec中产生的。您能解释一下还是给我看一个例子?


阅读 166

收藏
2020-07-02

共1个答案

一尘不染

一个类型名称只能源自TypeSpec。这就是重点。所以

type Foo int64
var x Foo
var y Foo

则两个都Foo起源于相同的TypeSpec,因此它们是相同Foo的。

但是,如果您有两个不同的文件(位于不同的程序包中):

前:

type Foo int64
var x Foo

b.go:

type Foo int64
var y Foo

那么,Foo在这种情况下,两个s是不相同的。即使它们是相同的类型名称,它们也源于不同的TypeSpec。这样做的结果是,类型xy不相同(且因此x = y不进行强制转换是不允许的)。

2020-07-02