为何不同
在Golang规格:为何不同
type (
T0 []string
T1 []string
)
它说T0和T1是不同的,因为它们具有独特的命名类型declarations.but有个规则:如果他们的类型 两个命名的类型是相同的名称来源于相同的TypeSpec。 那么为什么T0和T1是不同的?
编辑:
在规格它也说:
类型声明结合的标识符,类型名,一种新型 具有相同的基本类型作为现有类型和为现有类型定义的操作 也针对新类型定义。 新类型与现有类型不同。
考虑:
type (
T0 []string
T1 []string
)
转到编程语言6月28日的规格
版,2017年
类型定义创建了一个新的,不同的类型,具有相同 基础类型和操作作为给定类型,并将 标识符绑定到它。
TypeDef = identifier Type .
新类型被称为定义类型。它与任何其他 类型不同,包括它的创建类型。
定义的类型总是与其他类型不同。否则,两个 类型是相同的,如果它们的基础类型文字在结构上相当于 ;也就是说,它们具有相同的字面结构,并且相应的组件具有相同的类型。
T0和T1是定义的类型,因此是不同的。
参考文献:
6月28日的The Go Programming Language Specification
版,2017
A型确定一组值与操作和方法一起特定于这些值。类型可以用类型名称表示,如果它有 有一个类型,或者使用类型字面量来指定,该类型文字组成 现有类型的类型。
预定义的布尔型,数值型和字符串类型的命名实例为 。其他命名类型引入了类型声明。
类型声明结合的标识符,类型名,一个类型。类型 声明有两种形式:别名声明和类型 定义。
TypeDecl = "type" (TypeSpec | "(" { TypeSpec ";" } ")") . TypeSpec = AliasDecl | TypeDef .
别名声明
别名声明结合的标识符设置为给定类型。
AliasDecl = identifier "=" Type .
在所述标识符的范围内,它用作用于 类型的别名。
类型定义
类型定义创建一个新的,不同的类型,具有相同 基础类型和操作给定的类型,并结合一个 标识符给它。
TypeDef = identifier Type .
新类型被称为定义类型。它与任何其他 类型不同,包括它的创建类型。
两种类型相同或不同。
定义的类型总是与其他类型不同。否则,两个 类型是相同的,如果它们的基础类型文字在结构上相当于 ;也就是说,它们具有相同的字面结构,并且相应的组件具有相同的类型。
@JimB:“'如果两个切片类型具有相同的元素类型,则它们是相同的。”对于定义的类型不适用:[类型标识](https://golang.org/ref/spec#Type_identity)。 '定义类型总是与其他类型不同。' – peterSO
@shx:The Go Programming Language Specification的当前版本位于https://golang.org/ref/spec。你从哪里得到你的报价? – peterSO
@peterSO,是的,并不意味着它只是一个答案,只是试图找出引用来自哪里,为什么这是一个问题。 – JimB