Golang 之区分类型别名与类型定义的方法
一、类型别名(TypeAlias)、类型定义是什么?
类型别名是Go1.9版本添加的新功能。主要应用于代码升级、工程重构、迁移中类型的兼容性问题。C/C++语言中,代码的重构升级可以使用宏快速定义新的代码。Go语言中并未选择通过宏,而是选择通过类型别名解决重构中最复杂的类型名变更问题。
在Go1.9版本之前内建类型定义的代码如下:
typebyteuint8 typeruneint32
在Go1.9版本之后内建类型定义的代码如下:
typebyte=uint8 typerune=int32
通过以上可以看出这个修改就是配合类型别名进行修改的。
二、区分类型别名与类型定义
类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型,即基本数据类型是一致的。好比如我们小时家里人给我们起的小名,上学后英语老师给起的英文名字,但是这个名字都是指的我们自己。
表面上看类型别名与类型定义只有一个等号的差异("="),实际上的差异我们通过一段简短的代码更为深刻的理解二者之间的差异,如下代码所示;
packagemain import"fmt" //自定义类型myInt,基本类型是int typemyIntint //将int类型取一个别名intAlias typeintAlias=int funcmain(){ //声明a变量为自定义myInt类型 varamyInt //输出a的类型和默认值 fmt.Printf("aType:%T,value:%d\n",a,a) //声明b变量为intAlias类型 varbintAlias //输出b的类型和默认值 fmt.Printf("bType:%T,value:%d\n",b,b) }
==输出结果==:
aType:main.myInt,value:0
bType:int,value:0
- 从上面的结果我们可以看出,a的类型是main.myInt,表示main包下定义的myInt类型。生成了新的数据类型。
- b的类型是int。intAlias类型只会在代码中存在,编译完成时,不会有intAlias类型。
类型定义
类型定义:依据基本类型声明一个新的数据类型。
//新声明一个变量cintAlias类型 varcintAlias c=a fmt.Printf("cType:%T,value:%d\n",c,c) OutPutResult: cannotusea(typemyInt)astypeintinassignment
从以上可以看出,变量a和c不是同一个类型,因此不能直接赋值;可以通过强制类型转换,实现修改为c=int(a)。
到此这篇关于Golang之区分类型别名与类型定义的方法的文章就介绍到这了,更多相关Golang区分类型别名与类型定义内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。