看到一段代码
type IntAlias = int
觉得很好奇,怎么中间有个=,搞得跟赋值语句似的。这是什么语法?
原来这是类型别名,跟类型定义不同。在Go1.9以前声明类型别名的时候是没有=的,Go1.9以后就有了。所以我以前看到的代码都是老代码,而且我也一直那样写。我一直是用类型定义,从来没用过类型别名。
Go1.9以前使用类型定义来定义byte
type byte uint8
Go1.9以后使用类型别名来定义byte
type byte = uint8
类型别名拥有之前类型的方法,但类型定义不行。
例如,你可以这样写代码
// 定义商标结构
type Brand struct {
}
// 为商标结构添加Show方法
func (t Brand) Show() {
}
// 为Brand定义一个别名FakeBrand
type FakeBrand = Brand
// 定义车辆结构
type Vehicle struct {
// 嵌入两个结构
FakeBrand
Brand
}
func main() {
// 声明a变量为车辆类型
var a Vehicl
// 指定调用FakeBrand的Show
a.FakeBrand.Show()
}
但是如果你把类型别名改成类型定义,编译器就会报错
a.FakeBrand.Show undefined (type FakeBrand has no field or method Show)
也就是说类型别名其实就是原类型,只不过多了一个新名字。