在Golang规范中:
type (
T0 []string
T1 []string
)
它说T0和T1是不同的,因为它们是具有不同声明的命名类型。但是有一个规则: 如果两个命名类型的类型名称来自同一个TypeSpec,则它们是相同的。 为什么T0和T1不同?
编辑:
在规范中它也说:
类型声明将标识符(类型名称)绑定到新类型 与现有类型和操作具有相同的基础类型 为现有类型定义的也是为新类型定义的。的的 新类型与现有类型不同。
答案 0 :(得分:1)
假设:
type (
T0 []string
T1 []string
)
Go编程语言规范
2017年6月28日的版本
类型定义创建一个具有相同的新的不同类型 作为给定类型的基础类型和操作,并绑定 它的标识符。
TypeDef = identifier Type .
新类型称为已定义类型。它与众不同 type,包括从中创建的类型。
定义的类型总是与任何其他类型不同。否则,两个 如果它们的基础类型文字在结构上是相同的 当量;也就是说,它们具有相同的文字结构和 相应的组件具有相同的类型。
T0和T1是定义的类型,因此是不同的。
<强>参考文献:强>
The Go Programming Language Specification
2017年6月28日的版本
类型确定一组值以及操作和方法 具体到那些价值观。如果类型名称可以用类型名称表示 有一个,或使用类型文字指定,它组成一个类型 现有的类型。
布尔值,数字和字符串类型的命名实例 预声明。其他命名类型与类型声明一起引入。
类型声明将标识符(类型名称)绑定到类型。类型 声明有两种形式:别名声明和类型 定义
TypeDecl = "type" ( TypeSpec | "(" { TypeSpec ";" } ")" ) . TypeSpec = AliasDecl | TypeDef .
别名声明
别名声明将标识符绑定到给定类型。
AliasDecl = identifier "=" Type .
在标识符的范围内,它充当了标识符的别名 类型。
类型定义
类型定义创建一个具有相同的新的不同类型 作为给定类型的基础类型和操作,并绑定 它的标识符。
TypeDef = identifier Type .
新类型称为已定义类型。它与众不同 type,包括从中创建的类型。
两种类型相同或不同。
定义的类型总是与任何其他类型不同。否则,两个 如果它们的基础类型文字在结构上是相同的 当量;也就是说,它们具有相同的文字结构和 相应的组件具有相同的类型。