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

2018-07-19 19:13:03 +08:00
 j0hnj

Go 语言规范中关于 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,按规范应该是可以赋值的,但实际上是会报错的。是我哪里理解错了呢?

1041 次点击
所在节点    Go 编程语言
1 条回复
reus
2018-07-19 20:19:30 +08:00
内置类型是 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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/472445

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX