9.4.2 类型定义

基于另一种类型(命名或其他),类型定义创建一个新的、名称不同的类型,其具有与给定类型相同的基础类型和操作。类型定义中的标识符是新类型的名称。

以这种方式创建的新类型称为定义类型。它不同于任何其他类型,包括它创建的类型。特别地,它不继承与给定类型绑定的任何方法。可以与新的定义类型相关联的方法。

类型定义使用类似的语法:

  • type关键字,后跟

  • 一个由分号分隔的名称类型对的列表,用括号括起来

只有一个名称类型对时,不需要括号。

type Rank uint8          // Rank是一种新类型,与uint8不同,与前面的别名声明示例不同。类型定义和别名声明的语法不同,在于等号(=)的存在/缺失。在这个例子中,Rank的基础类型是uint8

还可以从匿名类型创建命名的新类型。例如,

type (
    Point struct{ x, y int32 } // Point和struct {x,y int32}是不同的类型。然而,Point与指定的(匿名)类型struct {x,y int32}在这个例子中是结构相同的
    Coord Point                // Coord和Point以及struct {x,y int32}都是不同的类型
)

另一个例子,其中基于接口类型创建新类型:

type Mover interface {        // Mover和interface {Move()}是不同的类型。但是,Mover的方法集包括一个方法Move() bool
    Move() bool
}

可以使用类型定义语法(但不能通过别名声明)创建泛型类型。下面将解释泛型类型。

最后更新于