go 语言中 类型声明/类型别名 的作用何在?

2018-06-13 14:58:30 +08:00
 lueffy

最近在学习 go 语言,看了慕课网上的几个入门视频,讲的很浅显,但是都是说是什么怎么做,没有说为什么,所以有很多疑问 比如说 类型别名和类型声明

type D = int // 类型别名 type I int // 类型声明 类型别名和原类型完全一样,只不过是另一种叫法而已 类型别名和原类型是相同的,而类型定义和原类型是不同的两个类型。

我明白了这两个的意思和区别,但是 类型别名的作用何在?用在什么场景下? 既然和原类型一致,为什么不直接使用原类型??干嘛还要声明类型别名?

类型声明我就更不能理解了,两种类型用起来是一样的,但是却不能相互加减乘除,有啥用啊??

求解!!

2049 次点击
所在节点    Go 编程语言
11 条回复
ArieShout
2018-06-13 15:07:32 +08:00
可以为新定义的类型别名定义新的方法
prolic
2018-06-13 15:13:36 +08:00
最简单的应用,你可以 type xxx []int,然后定义 Swap Less Len 来做排序,把偶数放前面奇数放后面
6diyipi
2018-06-13 15:16:15 +08:00
定义别名,就是为了让代码更可读;
例如

type Weekday int

const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
hahasong
2018-06-13 15:18:01 +08:00
看什么视频,go 语言圣经的中文译本讲的很通俗,半天刷一遍就可以照着项目撸了
boboliu
2018-06-13 15:43:27 +08:00
请阅读文档。

以及 type alias 的主要目的是自己重写或者加方法吧
pynix
2018-06-13 15:53:39 +08:00
可读性。
Y4ssss
2018-06-13 16:12:18 +08:00
1、为新定义的类型别名定义新的方法
比如 type I int,你可以给 I 加一个新的方法,但是不能直接给 int 加方法

2、可读性
LT
2018-06-13 17:05:55 +08:00
@Y4ssss 赞同
Greenm
2018-06-13 17:45:33 +08:00
没学过 go,但我猜是不是和 C 语言里的 typedef 类似?
gamexg
2018-06-13 18:00:34 +08:00
@Greenm #9 不太一样。
go 里面声明出来的是新类型,不是别名。新类型有自己的方法,而且互相之间需要强制类型转换。

不过新版本也出了个和 typedef 类似的,目的是为了解决包路径迁移后两个路径的结构被认为是两个独立的结构,互相之间需要强制转换的问题。
bluefalconjun
2018-06-13 18:07:08 +08:00
刚刚看完这里.

一个类型声明语句创建了一个新的类型名称,和现有类型具有相同的底层结构。新命名的类
型提供了一个方法,用来分隔不同概念的类型,这样即使它们底层类型相同也是不兼容的。
type 类型名字 底层类型

go 语言圣经 2.5 章节

例子很易懂. 建议还是看书学习.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX