视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Golang之区分类型别名与类型定义
2020-11-27 21:50:24 责编:小采
文档

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Golang 之区分类型别名(Type Alias)与类型定义(Type define)

  • 一、类型别名(Type Alias)、类型定义是什么?
  • 二、区分类型别名与类型定义
  • 类型定义
  • 类型别名
  • 类型定义
  • 区分类型别名、类型定义
  • 非本地类型不能定义方法
  • 一、类型别名(Type Alias)、类型定义是什么?

    类型别名 是 Go 1.9 版本添加的新功能。主要应用于代码升级、工程重构、迁移中类型的兼容性问题。C/C++ 语言中,代码的重构升级可以使用宏快速定义新的代码。Go 语言中并未选择通过宏,而是选择通过类型别名解决重构中最复杂的类型名变更问题。

    在 Go 1.9 版本之前内建类型定义的代码如下:
     type byte uint8
     type rune int32
    
    在Go 1.9 版本之后内建类型定义的代码如下:
     type byte = uint8
     type rune = int32
    
    通过以上可以看出这个修改就是配合类型别名进行修改的。

    二、区分类型别名与类型定义

    类型别名规定:Type Alias只是Type 的别名,本质上Type Alias 与Type是同一个类型,即基本数据类型是一致的。好比如我们小时家里人给我们起的小名,上学后英语老师给起的英文名字,但是这个名字都是指的我们自己。 表面上看类型别名与类型定义只有一个等号的差异("="),实际上的差异我们通过一段简短的代码更为深刻的理解二者之间的差异,如下代码所示;
    package main
    
    import "fmt"
    
    // 自定义类型myInt,基本类型是int
    type myInt int
    
    //将 int 类型取一个别名intAlias
    type intAlias = int
    
    func main() {
    	//声明 a变量为自定义 myInt 类型
    	var a myInt
    	// 
    输出 a 的类型 和默认值 fmt.Printf("a Type: %T, value: %d\n", a, a) //声明 b变量为 intAlias 类型 var b intAlias // 输出 b 的类型 和默认值 fmt.Printf("b Type: %T, value: %d\n", b, b) } == 输出结果 ==: a Type: main.myInt, value: 0 b Type: int, value: 0
  • 从上面的结果我们可以看出,a 的类型是 main.myInt,表示main 包下定义的myInt 类型。胜场了新的数据类型。
  • b 的类型是 int 。intAlias 类型只会在代码中存在,编译完成时,不会有 intAlias 类型。
  • 类型定义

    类型定义:依据基本类型声明一个新的数据类型。

    	// 新声明一个变量c intAlias 类型
    	var c intAlias
    	c = a
    	fmt.Printf("c Type: %T, value: %d\n", c, c)
    	
    OutPut Result:
     cannot use a (type myInt) as type int in assignment
    

    从以上可以看出,变量 a 和 c 不是同一个类型,因此不能直接赋值;可以通过强制类型转换,实现 修改为 c=int(a)。

    下载本文
    显示全文
    专题