注意Go 1.9 之后才出现了类型别名
相同点
两种定义的方式均使用 type
关键字
不同点
1. 定义方式不同
类型定义方式如下:
type NewType Type
类型别名定义如下:
type NewType = Type
2. 本质不同
类型定义相当于定义了一个全新的类型,与之前的类型不同,但是类型别名并没有定义一个新的类型,而是使用一个别名来替换之前的类型,就比如说一个人的乳名,虽然你的乳名和你的全名不同,但是实际上他们指的都是你
下面的代码可以很明显的说明这一点:
package main
import (
"fmt"
)
func main(){
// 类型定义
type MyInt int
// 类型别名定义
type MyInt2 = int
var i MyInt = 2
var j MyInt2 = 2
fmt.Printf("i的值为:%v, i的类型为: %T\n", i, i)
fmt.Printf("j的值为:%v, j的类型为: %T\n", j, j)
}
代码输入如下:
i的值为:2, i的类型为: main.MyInt
j的值为:2, j的类型为: int
类型别名只会在代码中存在,在编译完成之后并不会存在该别名
3. 使用方式有所不同
因为类型别名和原来的类型是一致的,所以原来类型所拥有的方法,类型别名中也可以
调用,但是如果是重新定义的一个类型,那么不可以
调用之前的任何方法