package main
type Inner struct {
x int
}
type Outer struct {
Inner
}
func main() {
x := Inner{1}
y := (Outer)(x) // cannot convert x (type Inner) to type Outer
}
go 规范部分转换 https://golang.org/ref/spec#Conversions声称
在以下任何情况下,非常量值 x 都可以转换为类型 T:
...
忽略结构标签(见下文),x 的类型和 T 具有相同的基础类型。
...
该部分关于类型标识 https://golang.org/ref/spec#Type_identity says:
如果两个结构类型具有相同的字段序列,并且相应的字段具有相同的名称、相同的类型和相同的标记,则它们是相同的。
据我了解,两者Inner
and Outer
有一个字段x
这是一个int
。那么为什么我不能转换Outer
to an Inner
?
我最终发现我可以使用x.Inner
,但这花了我一段时间,所以我很好奇为什么(在我看来)更明显的方法被禁止。
Outer
没有字段x
。它有一个字段Inner
,其中有一个字段x
。访问时.x
,选择器(.
)将自动从最浅的深度提升嵌入字段,其中存在这样的x
.
请参阅规格选择器 https://golang.org/ref/spec#Selectors
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)