类型别名和类型定义

看到一段代码

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)

也就是说类型别名其实就是原类型,只不过多了一个新名字。

 

你可能感兴趣的:(go)