为什么这不是类型不匹配?来自:https : //golang.org/ref/spec#Assignability在以下任何一种情况下,值 x 可分配给 T 类型的变量(“x 可分配给 T”): ...剪掉 ... x 的类型 V 和 T 具有相同的基础类型,并且至少有 V 或 T 之一不是命名类型。...剪...那是因为 N[] 的基础类型是 N[] 而不是命名类型吗?其背后的原理是什么?package mainimport "fmt"type N []Nfunc main() { n := make([]N, 1) fmt.Printf("%T\n", n) fmt.Printf("%T\n", n[0]) n[0] = n //fmt.Println(n)}*Output:*[]main.Nmain.N
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
你问是否n[0] = n
有效。您已正确识别语言规范中的规则:
在以下任何一种情况下,值
x
都可分配给类型为T
(“x
可分配给T
”)的变量:
...
x
的类型V
并T
具有相同的基础类型,并且至少有一个V
或T
不是命名类型。
以下是它的适用方式:
n[0]
具有类型N
和基础类型[]N
(来自语言规范:“N
在其类型声明中引用的类型”)。n
具有类型[]N
(具有相同的基础类型)。
因此n[0]
和n
具有相同的底层类型 ( []N
),并且 的类型n
不是命名类型。
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消