为什么这不是类型不匹配?
来自:https://golang.org/ref/spec#Assignability
在任何这些情况下,值x都可分配给类型为T的变量(“x可赋予T”): ...略... x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是命名类型。 ... ...剪断
是否因为N []的基础类型是N []而不是命名类型?
背后的理由是什么?
package main
import "fmt"
type N []N
func main() {
n := make([]N, 1)
fmt.Printf("%T\n", n)
fmt.Printf("%T\n", n[0])
n[0] = n
//fmt.Println(n)
}
*Output:*
[]main.N
main.N
答案 0 :(得分:1)
您问n[0] = n
是否有效。您已从语言规范中正确识别规则:
值
x
可分配给T
类型的变量(“x
是 在任何这些情况下都可分配给T
“):
- ...
x
的类型V
和T
具有相同的基础类型,V
或T
中至少有一个不是命名类型。
以下是它的适用方式:
n[0]
的类型为N
,基础类型为[]N
(来自语言规范:“N
在其类型声明中引用的类型”)。n
的类型为[]N
(具有相同的基础类型)。因此n[0]
和n
具有相同的基础类型([]N
),n
的类型不是命名类型。