什么是类型别名?什么是潜在类型?

别名类型

在Go语言里,能够用type声明自定义的各类类型。在这些自定义的类型中,有一种被叫作别名类型函数

举个例子:ui

type MyString = string

这句代码的意思是:MyString是string类型的别名类型。顾名思义,别名类型和源类型的区别仅仅在名称不一样。code

别名类型主要是为了重构代码而存在的。接口

Go语言内建的基本类型中就存在2个别名类型。byte是uint8的别名类型。rune是int32的别名类型。string

潜在类型

若是这样声明类型MyStringclass

type MyString string //注意这里没有 = 符号

这时候,MyString和string就是2个不一样的类型了。这里的MyString是一个新的类型,不一样于其余任何类型。这种方式叫作对类型的自定义。string能够被称为MyString的潜在类型。潜在类型的含义是:某个类型在本质上是哪一个类型或者哪一个类型的集合。变量

潜在类型相同的不一样类型的值之间是能够进行类型转换的。重构

别名类型在代码重构过程当中的做用

  1. 名字能够取的更通俗易懂;
  2. 须要修改数据类型时,只用改定义的那一处地方;
  3. 能够很方便的添加特有方法,以实现某些接口。

对于大型的代码库来讲,可以重构其总体结构是很是重要的,包括修改某些 API 所属的包。大型重构应该支持一个过渡期:从旧位置和新位置得到的 API 都应该是可用的,并且能够混合使用这些 API 的引用。Go 已经为常量、函数或变量的重构提供了可行的机制,可是并不支持类型。类型别名提供了一种机制,它可使得 oldpkg.OldType 和 newpkg.NewType 是相同的,而且引用旧名称的代码与引用新名称的代码能够互相操做。数据类型

考虑将一个类型从一个包移动到另外一个包中的状况,好比从 oldpkg.OldType 到 newpkg.NewType。能够在包 oldpkg 中指定一个新类型的别名 type OldType = newpkg.NewType,这样之前的代码都无需修改。引用

以上,整理自《极客时间Go语言专栏》