美文网首页Golang
Golang type 类型别名和类型定义

Golang type 类型别名和类型定义

作者: 鹅鹅鹅_ | 来源:发表于2019-03-21 16:26 被阅读44次

    Golang语言中存在一个关键字type,type又有两种使用方式,一种是类型别名,一种是类型定义,是不是熟悉的C语言(define和typedef)味道?

    • 类型定义
    type Student struct {
      name String
      age int
    }
    
    type I int
    
    • 类型别名
    type Sdt = Student
    type I = int
    

    他们之间有什么区别呢?区别就是类型定义是完全定义了一种新的类型,而类型别名只是给现有的类型取了一个别名alias

    type I int
    type D = int
    

    拿上面的例子来说,I是一种全新的类型,和现有的int类型完全不一样,即I类型的指针不能只想int类型的指针,反之亦然,类似于C语言中的typedef。而D只是int的一个别名,相当于编译期会预处理替换为int,类似于C语言中的#define。
    可能上面的例子太特殊了,看下面的例子

    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 {}
    

    相关文章

      网友评论

        本文标题:Golang type 类型别名和类型定义

        本文链接:https://www.haomeiwen.com/subject/pgkcvqtx.html