为什么这个分配不是类型不匹配?

为什么这不是类型不匹配?


来自: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


浮云间
浏览 133回答 1
1回答

GCT1015

你问是否n[0] = n有效。您已正确识别语言规范中的规则:在以下任何一种情况下,值x都可分配给类型为T(“x可分配给T”)的变量:...x的类型V并T具有相同的基础类型,并且至少有一个V或T不是命名类型。以下是它的适用方式:n[0]具有类型N和基础类型[]N(来自语言规范:“N在其类型声明中引用的类型”)。n具有类型[]N(具有相同的基础类型)。因此n[0]和n具有相同的底层类型 ( []N),并且 的类型n不是命名类型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go