Golang早读:自定义类型 & 类型别名

499 阅读1分钟

自定义类型

在Go语言中有一些基本的数据类型,如string、int、float64、bool等数据类型,Go语言中使用type关键字来定义自定义类型

image.png

如上图我们自定义了一个数据类型MyTime,也就是time.Time,那么为什么time.Time所拥有的方法MyTime却没有?

官方已经告诉我们:go.dev/ref/spec#Ty…

image.png

意思就是说,只要是type自定义的类型,都是不同的(类型别名除外)。显然我们定义的MyTimetime.Time是不同的

类型别名

类型别名规定:TypeAlias只是Type的别名,本质上TpyeAlias和Type是同一个类型,就像是你的小名和你的大名以及你的英文名都是指的你本人。

golang中的runebyteany就是类型别名

image.png

我们通过类型别名再尝试一下上面的MyTime类型

image.png

system time: [34 50 48 50 50 45 49 50 45 48 54 84 49 49 58 48 52 58 52 49 46 57 55 53 50 55 50 55 43 48 56 58 48 48 34], []uint8
my time: [34 50 48 50 50 45 49 50 45 48 54 84 49 49 58 48 52 58 52 50 46 48 49 54 49 52 50 53 43 48 56 58 48 48 34], []uint8

果然,设置类型别名之后MyTimetime.Time是一致的

补充:内嵌类型

通过将time.Time嵌入MyTime,此时MyTime也可以获得Time类型的方法集

image.png