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-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 |