Golang语言中存在一个关键字type,type又有两种使用方式,一种是类型别名,一种是类型定义。
GoLang1.9后对內建定义类型使用了新的写法:
type NewName = Type
这个NewName只是Type的别名。NewName和Type是一致的类型。
而类型定义,则是会产生新的类型。虽然新类型和旧类型是一样的类型。但会被认为是不同的类型名字。
type NewName Type
type Student struct {
name String
age int
}
type Teacher Student
相当于定义了一个新的Teacher类型,和下面的代码是等价的。虽然两个类型内存布局完全一样,但是从概念上来说,他们是完全不同的两个类型,不能相互兼容。
type Teacher struct {
name String
age int
}
类型别名这个功能非常有用,鉴于go中有些类型写起来非常繁琐,比如json相关的操作中,经常用到map[string]interface {}这种类型,写起来是不是很繁琐,没关系,给它起个简单的别名!这样用起来爽多了。
type strMap2Any = map[string]interface {}