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

其中第二条说,如果 x 的类型 V 和类型 T 有相同的 underlying types,并且 V 和 T 至少有一个不是 defined type,就可以将 x 赋值给类型为 T 的变量。
规范中提到了用 type 定义的新类型是 defined type, 但是没说什么不是 defined type... 我的理解是 Go 内置的类型就不是 defined type,但是下面这个例子:
type T int
var t T
var x int = 1
t = x // 会报错
t 和 x 的 underlying type 都是 int,而且 int 不是 defined type,按规范应该是可以赋值的,但实际上是会报错的。是我哪里理解错了呢?
1
reus 2018 年 7 月 19 日 内置类型是 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 |