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

请问 Go 语言规范中关于 Assignability 的描述该怎么理解?

  •  
  •   j0hnj · 2018-07-19 19:13:03 +08:00 · 1039 次点击
    这是一个创建于 2106 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go 语言规范中关于 Assignability 的说明:

    assignability

    其中第二条说,如果 x 的类型 V 和类型 T 有相同的 underlying types,并且 VT 至少有一个不是 defined type,就可以将 x 赋值给类型为 T 的变量。

    规范中提到了用 type 定义的新类型是 defined type, 但是没说什么不是 defined type... 我的理解是 Go 内置的类型就不是 defined type,但是下面这个例子:

    type T int
    
    var t T
    var x int = 1
    t = x  // 会报错
    

    tx 的 underlying type 都是 int,而且 int 不是 defined type,按规范应该是可以赋值的,但实际上是会报错的。是我哪里理解错了呢?

    1 条回复    2018-07-19 20:19:30 +08:00
    reus
        1
    reus  
       2018-07-19 20:19:30 +08:00   ❤️ 1
    内置类型是 defined type,因为在 builtin 包里有这样的定义
    type int int
    type string string
    符合 defined type 的定义
    所以不能赋值

    复合类型就不是 defined type,例如下面的变量的类型都不是 defined type
    var p *int
    var c chan int
    var a [2]int
    var m map[int]int
    var f func(int) int
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4718 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 10:01 · PVG 18:01 · LAX 03:01 · JFK 06:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.