Golang type 类型别名和类型定义

鹅鹅鹅_ · · 3650 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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 类型别名和类型定义

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3650 次点击  
加入收藏 微博
1 回复  |  直到 2023-04-19 21:52:29
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传