为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
浮云间 2021-11-22 15:08:04
为什么这不是类型不匹配?来自: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的类型VT具有相同的基础类型,并且至少有一个VT不是命名类型。

以下是它的适用方式:

  • n[0]具有类型N和基础类型[]N(来自语言规范:“N在其类型声明中引用的类型”)。

  • n具有类型[]N(具有相同的基础类型)。

因此n[0]n具有相同的底层类型 ( []N),并且 的类型n不是命名类型。


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信