V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
j0hnj

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

  •  
  •   j0hnj · Jul 19, 2018 · 1427 views
    This topic created in 2843 days ago, the information mentioned may be changed or developed.

    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 replies    2018-07-19 20:19:30 +08:00
    reus
        1
    reus  
       Jul 19, 2018   ❤️ 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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1067 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:50 · PVG 07:50 · LAX 16:50 · JFK 19:50
    ♥ Do have faith in what you're doing.