V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
lueffy
V2EX  ›  Go 编程语言

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

  •  
  •   lueffy · 2018-06-13 14:58:30 +08:00 · 2050 次点击
    这是一个创建于 2380 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    求解!!

    11 条回复    2018-06-13 18:07:08 +08:00
    ArieShout
        1
    ArieShout  
       2018-06-13 15:07:32 +08:00 via iPhone
    可以为新定义的类型别名定义新的方法
    prolic
        2
    prolic  
       2018-06-13 15:13:36 +08:00
    最简单的应用,你可以 type xxx []int,然后定义 Swap Less Len 来做排序,把偶数放前面奇数放后面
    6diyipi
        3
    6diyipi  
       2018-06-13 15:16:15 +08:00   ❤️ 1
    定义别名,就是为了让代码更可读;
    例如

    type Weekday int

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

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

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

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

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

    go 语言圣经 2.5 章节

    例子很易懂. 建议还是看书学习.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:28 · PVG 22:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.