Golang: Pattern: Type Alias for Readability

 26th October 2022 at 11:27am

如何使用 Go 的 type alias 来提升代码可读性。

对于这样一个 map:

var m map[string]any

你并不知道它的 key 代表什么。你可以给 string 一个类型别名(type alias):

type Region = string
var m map[Region]any

就可以很直观地看出,m 的 key 代表的是一个地域(Region)。

Go 里面有两种很像的跟类型相关的声明:

// RegionT1 仅是一个类型别名(type alias)而不是一种新的类型。它会被编译器认为就是 string 类型。
type RegionT1 = string  

// RegionT2 是一个新的类型(通过类型声明,type declaration)。它可以跟 string 互转。
type RegionT2 string

是否是新的类型,影响主要在于能否给类型定义方法。对于 RegionT1,你无法给它定义方法,因为你无法给内置的 string 类型的增加方法。对于 RegionT2,可以给它定义方法。

如果仅是为了增加代码可读性,建议使用 type alias 而不是 type declaration,可以减少引入的新类型。

另外,type alias 被发明的初衷是用来做 代码重构 的。但我认为它也适用于提升可读性的场景。